[JAVA] 조건문, 반복문

msung99·2022년 3월 14일
0
post-thumbnail

if-else

예제1

int number = in.nextInt();

if(number % 3 == 0)
  System.out.println("3의 배수입니다.");
else
  System.out.println("3의 배수가 아닙니다.");
  
scanner.close();

예제2

int score = scanner.nextInt();

if(score = scanner.nextInt();
  grade = 'A'
else if(score >= 80)
  grade = 'B';
else
  System.out.println("학점은"+grade+"입니다");
  
scanner.close();

switch문

  • break
    • break문을 만나면 switch문을 벗어남
    • case 문에 break문이 없다면, 다음 case 문으로 계속 실행
  • case문의 값
    • 문자,정수,문자열 리터럴만 허용
    • 실수 리터럴은 허용되지 않음
    • 변수, 수식도 허용되지 않음
  • 형태
 switch(인자) {
   case 1:
   case 2:
   case 3:
     "인자가 1 또는 2 또는 3인 경우 실행하는 구문"
     break;
   
   case 4:
     "인자가 4인경우 실행하는 구문"
     break;
   
   default: 
     "모든 case문을 만족하지 못하는 경우 실행하는 구문"
}

예제1

char grade;
int score = scanner.nextInt();

switch(score / 10){
  case 10:
  case 9:
    grade = 'A';
    break;
  case 8:
    grade = 'B';
    break;
  default:
    grade = 'F';
}
System.out.println("학점은"+grade+"입니다");
scanner.close();

예제2 - 올바른 case문 값 할당 예시

// 에러 예시
switch(a){
  case a:  // 오류 => 변수 사용 안됨
  case a > 3: // 오류 => 수식 안됨 
  case a == 1:  // 오류 => 수식 안됨
  case 1.1: // 오류 => 실수 리터럴 안됨
}

// 올바른 사용 예시
int b;
switch(b%20){
  case1 :   // 정수 리터럴 사용 가능
    ...; 
    break;
  case2 :
    ...;
    break;
} 

char c;
switch(c){ 
  case '+'  // 문자 리터럴 사용 가능
   ...;
   break;
 case '-' 
   ...;
   break;
}

String s = "예";
switch(s){  
  case "예"  // 문자열 리터럴 사용 가능
   ...;
   break;
 case "아니요"
   ...;
   break;
}

for문

  • 반복문 안에서 변수 선언 가능
for(int i=0; i<10; i++) // 변수 i를 for문에서 선언. i는 for문을 벗어나면 사용 불가능
  System.out.println(i):
  • 반복문에서 변수 초깃값 초기화 가능
int i, sum; // 변수 선언
for(i=0, sum =0, i <= 100; i++) // 변수i, sum의 초깃값을 0으로 설정 
  sum += i;

for문의 특이한 형태

// 1.반복 조건이 true
for(초기작업; true; 반복후 작업){   // 반복 조건이 true이면 무한 반복
 ...
}

// 2. 반복 조건이 비어있음
for(초기작업; ; 반복후 작업){  // 반복조건이 비어있으면 true로 간주 => 무한 반복
  ...
}

// 3. 초기 작업과 반복후 작업은 쉼표 ',' 로 분리하여 여러 문장 나열 가능
for(i=0; i<10; i++, System.out.println(i) ){
 ...
}

// 4. for문 내에 변수선언
for(int i=0; i<10; i++){ // 변수 i는 for문 내에서만 사용 가능
  ...
}

while문

예제

int count = 0;
int sum = 0;
int n = scanner.nextInt();

while(n != -1){ // -1이 입력되면 while문 벗어남
  sum += n;
  count++;
  n = scanner.nextInt();
}

scanner.close();

do-while문

  • 무조건 중괄호 { } 블록을 한번 실행한후, 조건식을 검사해 반복 유무를 결정

  • 형태

do{
  .. 작업문 ..
} while(조건식);

예제

char c = 'a';
do {
    System.out.println(c);
    c = (char)(c+1);
  } while(c <= 'z');
}

break문

  • 하나의 반복문만 벗어남
  • 중첩 반복문이 있을때, 안쪽 반복문의 break문이 실행되면 안쪽 반복문만 벗어남
for(초기문; 조건식; 반복후작업){
  while(조건식){ 
    ...
    break;  // break 가 실행되면
  }
  ... // while문 탈출하고 이 구문으로 옴
}
...

continue 문

  • 반복문을 빠져 나가지 않으면서 다음 반복으로 진행
for(int i=0; i<5; i++){
  int n = scanner.nextInt();
  if(n <= 0)
    continue;  // 양수가 아닌 경우 다음 반복으로 진행
  else
    sum += n;
} 

예제 분석

예제3

Math.random() : 0 <= 난수 < 1 사이의 실수인 난수를 생성
=> int(Math.random()*20) : 0~19 사이의 정수형 난수를 생성

왜 0 <= 난수 < 20 사이의 난수가 아닌 0~19 사이의 정수형 난수인가?
=> double 타입을 int타입으로 바꾸면 실수 부분이 짤리기 때문
즉, 19.99999... 까지의 숫자가 만들어지는데 실수 부분이 짤리므로 19가 된다.

예제6

switch문 안에서 case는 여러개를 하나로 묶어서 실행문을 쓸수있다.

예제 11

for문 밖에서 반복 변수 i를 선언시 반복문이 끝나도 값이 유지된다.

예제 12

실수형 타입에 대한 연산은 정확하지 않다!

예제 16

scanner 가 system.in 이라는 입력 스트림을 이용해 입력을 편하게 받는 것이라고 했었다.

그러나 이 예제에서는 scanner 를 사용하지 않고 직접 system.in 을 사용해서 입력을 받는다

system.in 에는 사용자가 입력한 키보드에 적힌값으로 그대로 들어오는 것이 아니라, 내가 누른 키에 대응하는 바이트 코드 값으로 들어온다.

=> 이렇게 system.in 으로 직접 입력값을 받으면 바이트 코드 값으로 들어온 입력에 대해서 직접 처리하는 코드를 적어줘야함! (그래서 귀찮기때문에 scanner 객체를 많이 이용한다)

profile
블로그 이전했습니다 🙂 : https://haon.blog

0개의 댓글