JAVA SPRING/java

JAVA_002) 연산자, 조건문, 반복문, break문

오동순이 2023. 1. 25. 12:50

20221018 :

자바의 연산자

*산술 연산자 + 더하기,  - 빼기, * 곱하기,  / 나누기, % 나머지

 

*증감 연산자 ++, -- 변수(i)의 값을 1씩 증가시키거나 1씩 감소시킴 :  ++i / i++ ,  -- :--i / i--

 

*삼항 연산자(= 조건선택연산자)

 

age>=18?"성인":"미성년"
  조건식 ?  true :  false

 

*  boolean 비교연산자 : true, false

 

* 논리연산자 (boolean)
and && 교집합 ∩
or ||  합집합 ∪

true 1 false 0

x || y    논리합
x && y 논리곱

 

*전위연산자 후위연산자

    int i = 10;
    i++; // 1증가
    System.out.println(i);        // 후위연산 보통 요렇게 쓰기로 하자.
                                      // 연산에 따라 값이 변함.
        
    //i--; // 1감소
    //System.out.println(++i);    // 전위연산
    // System.out.println(i--);
    System.out.println(--i);

 

*대입연산자 op ( i += 3 )복합대입연산자 

        int i = 10;
        
        // i += 3;
        i = i + 3;

        // i -= 3;
        i = i - 3;

 

 

20221019 :

print println : 문자열 포맷팅 만들때 범용적으로 씀니다.

printf : 쓰는 사용환경에서만 사용


System.out.println
    : 내용을 출력한 후 자동으로 줄바꿈 처리를 한다
System.out.print
    : 출력후 줄바꿈 처리를 하지 않는다. 만약 줄바꿈을 하고 싶다면
        \n을 추가한다
System.out.printf
        : 출력내용을 서식에 맞춰 출력할때 사용하며 자체적인 줄바꿈 기능은 없다. 
        줄바꿈 처리를 위해 \n 혹은 %n 두가지를 사용할 수 있다.

 

 

조건문 if( else if, else ), switch

광범위 범위 비교 예 점수, 나이대 등 같은 것에 사용

if , else if , else

if(age > 120) System.out.println("출생년도 입력 오류");
else if(age >= 18) System.out.println("성인입니다.");
else if(age >= 14) System.out.println("청소년입니다.");
else if(age >= 0) System.out.println("어린이입니다.");
else System.out.println("출생년도는 "+CURRENT_YEAR+"를 넘을 수 없습니다.");

swirch

        switch(sel) {
            case 1:
                System.out.println("1번 기능 선택됨");
                break;
            case 2:
                System.out.println("2번 기능 선택됨");
                break;
            case 3:
                System.out.println("3번 기능 선택됨");
                break;
            case 4:
                System.out.println("4번 기능 선택됨");
                break;
            default:
                System.out.println("잘못된 번호 선택입니다.");
        }

 

* Math.random

public class RandomEx {
    
    public static void main(String[] args) {
        System.out.println(Math.random()*10); // Math.random() 0 ~ 1 난수 발생 //0~10까지 하고 싶으면 *10
        System.out.println(Math.random()*10+1); // 1~10까지 하고 싶으면 *10+1
        System.out.println((int)(Math.random()*10)); // 0~10까지 int 강제 형변환
        System.out.println(Math.round(Math.random()*10)); //반올림
        System.out.println(Math.ceil(Math.random()*10));  // 올림 Math.ceil double로 나옴
        System.out.println(Math.floor(Math.random()*10)); // 자름 Math.floor double로 나옴

    }
}

 

 

복문 while, for

* for 과 while  무엇이 다른가요?

제약조건이 어디서 걸리는가, 변수의 위치

증감연사자위치!
보통 for문이 더 좋지만, 무한루프문의 경우는 while!

public class LoopEx {
    public static void main(String[] args) {
        for(int i = 0; i<100; i++){
            System.out.println("반복합니다."+i); //0~99까지 100개나옴
        }
        // i = 10; i는 for문 안에 생성되어있기때문에 밖에서 사용못함 (변수의지역성)


        int j = 0;  
        int value = 10; //<< 3.은 변수 중복으로 오류가 뜸. main안에 while사용포함이 되어버림
        while(j < 10){
            int value = 10;     //<< 1. while문 지역 안에 value라서 사용가능
            System.out.println("while 반복 "+j+"번째");
            j++; // j++;을 빼먹을수 있음! 주의 필요!
        }
        // j = 10; j는 main문 안에서 사용되어 있기 때문에 바깥쪽에서 사용가능
        int value = 10; // <<2. main문 전체 안에서 value라서 사용가능 (1. 2.번 서로 다른것으로 됨.)
    }
}

 

for 문과 while문으로 구구단

// 구구단 7단 만들기
for(int i=1; i<10; i++){
	System.out.println("7 x"+i+"="+(7*i));
}

int i = 1;
while(i < 10){
	System.out.println("7 x"+i+"="+(7*i));
	i++;
}

 

이중 반복문(중첩반복문), for문안에 for문으로 구구단

public class NestedLoop {
    public static void main(String[] args) {
        // for(int i=0; i<4; i++){
        //     for(int j=0; j<3; j++){
        //         System.out.println("i : "+i+" / j : "+j);
        //     }
        // }
        
        //변수의 이름으로 명칭을 특정을 많이 해요 ex  i 루프 등.
        //2차원 반복문 2차원적인 표를 조회할때 요런너낌으로 사용
        for(int i=0; i<5; i++){         //i루프
            for(int j=0; j<5; j++){     //j루프
                System.out.print(" * ");
            }
            System.out.println();
        }

    }
}

 

스캐너를 이용한 for문으로 구구단

import java.util.Scanner;

public class NestedLoop {
    public static void main(String[] args) {
        
        Scanner s = new Scanner(System.in);
        System.out.print("시작 단을 입력하세요 : ");
        int begin = s.nextInt();
        System.out.print("끝 단을 입력하세요 : ");
        int end = s.nextInt();
        

        //구구단
        if (begin > end) {
            System.out.println("시작 단은 끝 단 보다 클 수 없습니다.");
            return; //메서드(함수)실행 종료
            // 이 return은 main메서드의 실행을 종료시키므로, 프로그램이 종료
        }
            for(int i=begin; i<=end; i++){
                System.out.println("=== "+i+" 단 ===");

                for(int j=1; j<=9; j++){
                    System.out.println(i+" x "+j+" = "+i*j);
                }
            }

        // //중첩반복문

        // for(int i=0; i<3; i++){
        //     for(int j=0; j<2; j++){
        //         System.out.println("i : "+i+" / j : "+j);
        //     }
        // }

    }
}

 

* for while do-while ( for a while ~하는 동안)

* do-while 은 주로 특수목적으로 쓰입니다.

 

break : 조건이 수행되면 종료되게 함

public class LoopEx2 {
    public static void main(String[] args) {
        for(int i=0; i<10; i++){
            System.out.println(i+"반복합니다.");
            if(i == 5)
            break;
        }
        int i = 0;
        int sum = 0;
        while(true){    //while(true) 무한 반복
            sum = sum + i;
            if(sum >= 1000) // while문 안에 조건을 넣음,
                break;      // 조건이 수행되면 종료.
            i++;
        }
        System.out.println("반복 횟수 : "+i+" / 총   합 :"+sum);

    }//main
}

반복문과 제어문!

public class LoopEx01 {
    public static void main(String[] args) {
        // 3번 Hello Wolrd를 화면에 표시하는 반복
        for (int i=0; i<3; i++){
            System.out.println("Hello World");
        }
        // for(int i=1; i<=9; i++){
        //     System.out.println("5 X "+i+" = "+5*i);
        // }

        for(int i=0; i<9; i++){   // 될수 있는 한 조건식은 건드리지 않고
            System.out.println("5 X "+(i+1)+" = "+5*(i+1)); //명령문에서 바꿔준다. 조건식이 덜 헷갈릴수있다.
        }

        // int i = 0;
        // while(i<3){
        //     System.out.println("Hello World");
        //     i++;
        // }

        // break 제어문
        String str = "Hello World! Java";
        for(int i=0; i<str.length(); i++){
            if(str.charAt(i) == 'a'){
                System.out.println("'a' detected!");
                break;
            }
            System.out.println(i +" : "+ str.charAt(i));
        }

        // continue 제어문
        // 1~100 사이 숫자 중 짝수만 출력하는 예시
        for(int i=1; i<=100; i++){
            if(i % 2 == 1){
                continue;
            }
            System.out.printf("%5d ",i); // 문자 포맷팅 %5d (공간5개문자출력)-> 00002
            if(i % 10 == 0){
                System.out.println();
            }
        }

        int i = 1;
        while(i<=10){
            if(i%2 == 0){
                i++; //i++;가 없으면 이안에서 무한루프에 걸릴 수 있음! 주의 !
                continue;
            }
            System.out.println(i);
            i++;
        }

        // 의도적인 무한반복
        // while(true), for(;;)

        Scanner s = new Scanner(System.in);
        int sum = 0, cnt = 0;
        while(true){
            System.out.print("입력 (0 to quit) : ");
            int input = s.nextInt();
            if(input == 0){
                break;
            }
            sum = sum + input;
            cnt++;
        }
        System.out.println("합계 : "+sum+" / 평균 : "+sum/(double)cnt);
        s.close();

        // Scanner s = new Scanner(System.in);
        int sum = 0, cnt = 0, input = 0;
        do{
            System.out.print("입력 (0 to quit) : ");
            input = s.nextInt();
            sum = sum + input;
            cnt++;
        }while(input != 0); // 0 != 0 false , 20 !=0 true
            System.out.println("합계 : "+sum+" / 평균 : "+sum/(double)cnt);
            s.close();



 	// do whlie을 쓰지 않고 while 문으로 할경우 
        Scanner s = new Scanner(System.in);
        int sum = 0, cnt = 0, input = -1; // 초기화 input = -1로 설정
        while(input != 0){      // 3. 그다음 반복시 비교하고, false가 됨
            System.out.print("입력 (0 to quit) : ");
            input = s.nextInt();
            sum = sum + input; // 1. 0입력시 0누적!
            cnt++;// 2. 횟수 추가됨
        }
        cnt--; // 4. 이쪽에서 0에 대한 횟수는 1개 빼줘야함. 
        // 감소값도 넣어야 함으로 굳이 do while이 아니라 while을 쓸필요가 
        System.out.println("합계 : "+sum+" / 평균 : "+sum/(double)cnt);
        s.close();

    }
}

 

무한반복? 그게뭐죠?

        while(sum < 1000){ // sum이 1000이 될때까지}    
        while(true) { // 무한 반복 : false가 나오지 않으므로}
        for( ; ; ){  //무한 반복}

 


VSCode 디버깅 해보기 : 어디서 문제가 생겼나요?

debug F5 빨간점 누르고 for문 옆에 F10 < 하나씩 진행되는거 확인
shift + F5 빠져나오는거

ctrl+c or Ctrl+z 강제종료
빠져나올수 없는 상태 무한루프/데드락/무한대기상태