조건문과 반복문

cutiepazzipozzi·2023년 4월 18일
1

지식스택

목록 보기
20/35
post-thumbnail

👍조건문

  • 조건문은 조건식 + 문장을 포함하는 블럭{} 으로 구성됨
  • switch문은 if문으로 변경이 가능하나, 모든 if문은 switch문으로 변경 가능은 X

블럭{}

= 여러 개의 문장을 하나로 묶기 위해 사용되는 것
ex. 함수, 조건문, 반복문 등에 사용

if문

//아래의 조건식은 true, false로 값이 결정되는 수식만 사용해야함
if(조건식) {}

if(조건식) 문장;

if(조건식) {}
else {}

if(조건식) 문장;
else 문장;

그러나 여기서 간단한 if-else문이라면 삼항연산자를 고려해봐도 좋다.

public static void main(String[] args) {
	int score = 45;
    char grade = ' ';
    grade = (score>=90) ? 'A' : ((score>=80) ? 'B' : 'C');
    
   	System.out.println("당신의 학점은 "+grade+"입니다.");
}
//당신의 학점은 C입니다 (ㅠㅠㅠ겁나 슬프군)

중첩 if문

++ char은 기본값을 \u1000으로 초기화 하지만 일반적으로 ' ' 공백으로 초기화 한다. (''이 표현은 X)
그러나 String은 참조형이기 때문에 null로 기본값을 선언해도 되지만 일반적으로 ""이렇게 빈 문자열로 초기화한다.

switch문

  • 조건의 경우의 수가 겁나 많을 때 switch문을 사용하는 것이 좋다!
    (간결하고 알아보기 쉬움)
    => if문의 조건식은 무조건 true/false 중 하나의 값을 가져야 하므로 조건식이 많아질 수 밖에 없지만, switch 조건식의 값이 int형 범위의 정수값 모두를 포함하므로 같은 기능의 if문보다 속도가 빠르다!

  • case문에는 오로지 리터럴이나 상수만을 허용한다. (변수X)

public static void main(String[] args) {
	int score = (int)(Math.random()*10)+1;
    
    swtich(score*100) {
    	case 100:
        	System.out.println("당신의 점수는 100이고, 상품은 자전거입니다.");
            break; //요 break문을 통해 switch문의 실행 종료
        case 200:
        	System.out.println("당신의 점수는 200이고, 상품은 TV입니다.");
            break;
        case 300:
        	System.out.println("당신의 점수는 300이고, 상품은 노트북입니다.");
            break;
        case 400:
        	System.out.println("당신의 점수는 400이고, 상품은 자동차입니다.");
            break;
        default:
        	System.out.println("죄송하지만 당신의 점수에 해당상품이 없습니다.");
     }
     
     //당신의 점수는 100이고, 상품은 자전거입니다.
}

Math.random()을 이용해 0 이상 10미만의 double형 변수값을 임의로 얻고, 10을 곱한뒤 int로 형변환 하고 1을 더해 1이상 11미만의 수로 만들어준다.

그러나 일부러 break문을 사용하지 않는 경우도 있다.

switch(level) {
	case 3:
    	grantDelete();
    case 2:
    	grantWrite();
    case 1:
    	grantRead();
}

차례대로 가장 높은 3등급을 가진 사용자는 삭제, 작성, 읽기 3가지의 기능을 모두 가지며 낮은 1등급을 가진 사용자는 읽기 권한 밖에 가지지 못한다.

👍반복문

= 어떤 작업이 반복적으로 수행되도록 할 때 사용

for문

= 주로 반복횟수를 알고 있을 때, counter가 반복문 내 필요할 때
= for(초기화;조건식;증감식) {실행문}

//for문의 작성 방법
for(;;) {} /*블럭 안의 문장들이 무한히 반복*/
for(int i = 0;;) {}  /*for문 안에서만 유효한 i 선언후 0 초기화*/
for(int i = 1, j = 1; i < 10 && i*j < 50; i++, j+= 2)
/*쉼표를 활용해 하나 이상의 변수를 선언 및 초기화*/

int sum = 0;
int i;
for(i = 1; i <= 10; i++) {
	sum += i;
}

여기서 변수 i는 for문을 감싸는 블럭 안에서만 유효하기 때문에 바깥에서 값을 불러올 수 없다. 그래서 선언부분을 for문 바깥으로 옮겨도 된다.

사실 여기서 궁금했던 건 마지막 i의 값은 10이지만 for문이 실행된 후 i값은 11이 되어있는 것이다. 추후에 찾아서 적어보도록!!!!!

  • for문은 이중 반복이 가능하다. (for문이 for문을 감싸는 형태)
for(int i = 1; i <= n; i++) {
	for(int j = 1; j <= n; j++) {
    	System.out.print("i와 j: "+i+" "+j);
    }
    System.out.println();
}
// i와 j: 1 1
..
   i와 j: 1 n
   i와 j: 2 1
..
   i와 j: n n

이렇게 외부 반복문이 한번 반복할 때마다 내부 반복문의 전체가 반복된다.

  • currentTimeMillis()를 이용해 for문 이전과 이후의 시간을 얻어 for문 수행에 걸린 시간도 알아볼 수 있다.
    (1970년 1월 1일부터 현재까지의 시간을 천분의 일초로 계산한 결과를 long형 정수로 반환하는 메서드)
long start = System.currentTimeMillis();
for(int i = 0; i < 1000000; i++) {}
long end = System.currentTimeMillis();

System.out.println("소요시간 = "+end-start);

while문

= 조건에 따른 반복만 필요할 때

  • 조건식 + 수행 블럭{} 구성
간단한 while문 예제

public static void main(String[] args) {
	int sum = 0;
    int i = 0;
    
    while((sum += ++i) <= 100) {
    	System.out.println(i+" - "+sum);
    }
}

do-while문 (※최소한 한번은 사용※)

= while문의 변형(기본적인 구조가 같음)
= 블럭{}이 먼저 수행된 후 조건식을 판단!
= do {/*결과가 true일 때 수행될 문장을 적음*/} while(조건식)

  • 조건식의 결과에 따라 {}이 수행되지 않을 수 있지만, do-while문은 최소한 한번은 수행될 것을 보장.
public static void main(String[] args) throws java.io.IOException {
	int input = 0;
    
    System.out.println("문장을 입력하세요.");
    System.out.println("입력을 마치려면 x를 입력하세요.");
    do {
    	input = System.in.read();
        System.out.print((char)input);
    } while(input != -1 && input != 'x');
}

System.in.read()를 이용해 사용자로부터 입력을 받는다.

System.in.read()

  • 한번에 한 문자밖에 읽지 못해 사용자가 입력한 내용이 버퍼에 저장돼 있다가 enter 키를 눌러야 전달됨
  • 사용자가 입력한 문자를 int형으로 반환하기 때문에 문자의 코드값이 반 환 => 화면으로부터 입력받은 그 문자를 다시 출력하려면 char로 형변환을 해줘야함!

break문

= 현재 위치에서 가장 가까운 switch문 or 반복문을 벗어나는데 사용

continue문

= 반복문 내에서만 사용됨
= 반복이 진행되는 中 continue가 있다면 반복문의 끝으로 이동해 다음 반복으로 넘어감
= 전체 반복 중 특정 조건을 만족하는 경우를 제외하고 싶을 때 Good

for(int i = 0; i <= 10; i++) {
	if(i%3==0) continue;
    System.out.println(i);
}
// 1 2 4 5 7 8 10 출력(줄바꿈으로)

이름 붙은 반복문

= 여러 반복문이 중첩돼 있을 때 반복문 앞에 이름을 붙이고 break문과 continue문에 이름을 지정해줌
= 하나 이상의 반복문을 벗어나거나 반복을 건너뛸 수 있다

public static void main(String[] args) {
	Loop1 : for(int i = 1; i <= 9; i++) {
    	for(int j = 1; j <= 9; j++) {
        	if(j==5)
            	break Loop1;
            System.out.println("i와 j: "+i+" "+j);
        }
    }
}
profile
노션에서 자라는 중 (●'◡'●)

0개의 댓글