반응형

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



# if문
if문은 조건식의 결과에 따라 블록실행 여부가 결정된다. 
다음은 if문의 형식과 실행 흐름을 보여준다.
            

조건식에는 true또는 false 값을 산출할 수 있는 연산식이나. boolean 변수가 올 수 있다. 
조건식이 true이면 블록을 실행하고 false이면 블록을 실행하지 않는다.



if(조건식) { // 조건식에는 비교연산자, 논리연산자 즉 true, false가 나와야 한다.
// 실행문
// 실행문
}

int a = 10;

if(a > 10)  {
    System.out.println("10보다 크다");
}
System.out.println("종료");




if(조건식) // 조건식이 1개인경우에는 코드블럭을 생략할수 있지만 생략하지 않는다.
//실행문

 

int score = 93;

if(score > 90) {
    System.out.println("점수가 90점 이상 입니다.");
    System.out.println("학점은 A입니다.");
}
// 한 줄이면 {}를 스킵할 수 있는데, 권장하지 않는다.
if (score < 90) 
    System.out.println("점수는 90 이하 입니다.");
    System.out.println("학점은 B입니다."); // if문과 관계없는 실행문




중괄호 { }블록은 여러 개의 실행문을 하나로 묶기 위해 작성된다. 
만약 조건식이 true가 될 때 실행해야 할 문장이 하나 밖에 없다면 생략할 수 있다. 
하지만 중괄호 { }블록을 생략하지 않고 작성하는 것을 추천한다. 
중괄호 블록을 작성하지 않으면 코드의 가독성(코드 해석)이 좋지 않고, 버그 발생 의 원인이 될 수 있다.

 

 

 

# if-else문

 

 

int age = 20;

if (age >= 18) {
    System.out.println("성인입니다.");
} else {
    System.out.println("미성년자 입니다.");
}	// 성인입니다.
int score = 80;

if (score > 60) {
    System.out.println("이 학생은 시험을 통과했습니다.");
} else {
    System.out.println("이 학생은 시험을 통과하지 못해 재시험 입니다.");
}	// 이 학생은 시험을 통과하지 못해 재시험 입니다.

// 논리 연산자를 넣어줄 수 있다.
int a = 10;
    if (a > 10 && a > 0) {
        System.out.println("참");
    } else {
        System.out.println("거짓");
    }
// 삼항 연산자를 넣어줄 수 있다.
boolean result = a > 10 ? true : false;

    if (result) {
        System.out.println("10보다 크다.");
    } else {
        System.out.println("10보다 작다.");
    }
// 이렇게 짝수, 홀수를 구할 수 있다.
int a = 10;

    if (a % 2 == 0) {
        System.out.println("a는 짝수 입니다.");
    } else {
        System.out.println("a는 홀수 입니다.");
    }

 

 

 

 

# if-else if-else문

 

 

 

// 8세 이하 : 미취학 아동, 8세 ~ 13세 : 초등학생, 14 ~ 16세 : 중학생, 17 ~ 19세 : 고등학생, 성인
// if문을 따로 만들면, 총 5개의 조건문이 실행이 된다. (불필요한 실행)
int age = 15;

    if (age <= 7) {
        System.out.println("미취학 아동 입니다.");
    }
    if (8<= age && age <= 13) {
        System.out.println("초등학생 입니다.");
    }
    if (14 <= age && age <= 16) {
        System.out.println("중학생 입니다.");
    }
    if (17 <= age && age <= 19) {
        System.out.println("고등학생 입니다.");
    } if (age > 19) {
        System.out.println("성인");
    }

 

 

-else if문을 사용해서 모든 조건문을 실행시키는 것이 아닌, 해당 조건문의 조건이 충족되면 그 조건문을 실행시키고 바로 이 조건문을 종료시키고 나온다. (불필요한 실행이 없는 것이다)

int age = 15;

    if (age <= 7) {
        System.out.println("미취학 아동 입니다.");
    } else if (age <= 13) {
        System.out.println("초등학생 입니다.");
    } else if (age <= 16) {
        System.out.println("중학생 입니다.");
    } else if (age <= 19) {
        System.out.println("고등학생 입니다.");
    } else {
        System.out.println("성인");
    }

 

 

-점수를 입력받고, 그 점수에 따른 차등적인 학점 등급 매기기 (실습 예제)

// 점수를 저장하기 위한 변수
int score = 0;
// 학점을 저장하기 위한 변수. 공백으로 초기화 한다.
char grade = ' ';
System.out.println("점수를 입력하세요. >");
Scanner scanner = new Scanner(System.in);
score = scanner.nextInt();

    if (90 <= score && score <= 100) {
        System.out.println("당신의 점수는 " + score + "점이고, 학점은 A입니다.");
    } else if (80 <= score && score < 90) {
        System.out.println("당신의 점수는 " + score + "점이고, 학점은 B입니다.");
    } else if (70 <= score && score < 80) {
        System.out.println("당신의 점수는 " + score + "점이고, 학점은 C입니다.");
    } else if (60 <= score && score < 70) {
        System.out.println("당신의 점수는 " + score + "점이고, 학점은 D입니다.");
    } else if (50 <= score && score < 60) {
        System.out.println("당신의 점수는 " + score + "점이고, 학점은 F입니다.");
    } else if (score < 50) {
        System.out.println("당신의 점수는 " + score + "점이고, 학점 미달로, 불합격 처리 되었으므로 재시험 응시 바랍니다.");
    } else {
        System.out.println("잘못된 점수를 입력했습니다.");
    }
int age = 0;
int price = 0;

System.out.println("입장하려는 사람의 나이를 입력하세요. >");

Scanner scanner = new Scanner(System.in);
age = scanner.nextInt(); // 화면을 통해 입력받은 숫자를 age에 저장

    if (age < 8) {
        price = 0;
        System.out.println("미취학 아동 입니다. (0살 ~ 7살) 입장료는 " + price + "원 입니다.");
    } else if (age < 14) {
        price = 1000;
        System.out.println("초등학생 입니다. (8살 ~ 13살) 입장료는 " + price + "원 입니다.");
    } else if (age < 17) {
        price = 3000;
        System.out.println("중학생 입니다. (14살 ~ 16살) 입장료는 " + price + "원 입니다.");
    } else if (age < 20) {
        price = 5000;
        System.out.println("고등학생 입니다. (17살 ~ 19살) 입장료는 " + price + "원 입니다.");
    } else if (age < 150) {
        price = 7000;
        System.out.println("성인입니다. 입장료는 " + price + "원 입니다.");
    } else {
        System.out.println("잘못입력한 값 입니다.");

위쪽 상단에 변수 값을 저장해놓았기에, 아래에 if문에서 정해놓은 지역변수가 끝나도 저장이 price의 변수 값은 저장이 되어 있는 상태이다. 상단 대괄호 {}를 나가지 않았기 때문이다.

 

 

 

 


 

 

 

# Math.random() 메소드



-Math.random() 메소드는 0.0과 1.0 사이에 속하는 double 타입의 난수 하나를 리턴한다. 
 0.0은 범위에 포함되고 1.0은 포함되지 않는다. 이것을 비교 연산자로 표현하면 다음과 같다.


0.0 <= Math.random() < 1.0


# 1 ~10까지 정수 중에서 하나의 정수를 얻기 위해 어떤 과정이 필요한지 알아보자. 
-먼저 각변에 10을 곱하면 다음과 같은 범위에 속하는 하나의 double 타입의 값을 얻을 수 있다. (Math.random() 메소드로 1~10까지의 범위 구하기)


# Math.random()에 * 10

0.0*10 <= Math .random()*10  < 1.0*10


# double타입을 int로 타입변환

0.0*10 <= Math .random()*10  < 1.0*10
                0         0,1,2,3,4,5,6,7,8,9           10


# Math.random() 메소드로 1 ~ 10 까지의 범위를 구하기위해 +1을 더한다. 
0+1 <= (int)(Math .random()*10)+1  < 10+1
                 1              1,2,3,4,5,6,7,8,9,10            11    



이 원리를 이용하면 start부터 시작하는 n개의 정수 중에서 
임의의 정수 하나를 얻기 위한 연산식을 다음과 같이 만들 수 있다.

int num = (int) (Math.random () * n) + start;(start <= Math.random() < n)


예를들어 주사위 번호 하나를뽑기 위해 다음 연산식을 사용할 수 있다.

int num = (int) (Math.random () * 6) + 1;

 

int str = (int)(Math.random()*8) + 1;
int dex =  (int)(Math.random()*8) + 1;
int int1 =  (int)(Math.random()*8) + 1;
int luk =  (int)(Math.random()*8) + 1;

System.out.println("str : " + str);
System.out.println("dex : " + dex);
System.out.println("int1 : " + int1);
System.out.println("luk : " + luk);

 

 

-주사위 굴리기에 대한 예제

// 1.0~6.999 > int 형변환 > 1~6
int num =(int) (Math.random() *6) +1; 


    if (num == 1) {
        System.out.println("1이 나왔습니다.");
    } else if (num == 2) {
        System.out.println("2가 나왔습니다.");
    } else if (num == 3) {
        System.out.println("3이 나왔습니다.");
    } else if (num == 4) {
        System.out.println("4가 나왔습니다.");
    } else if (num == 5) {
        System.out.println("5가 나왔습니다.");
    } else {
        System.out.println("6이 나왔습니다.");
    }

 

 

-컴파일러는 조건문을 읽고 나서 해석하지 않는다. (아래의 값은 b가 저장이 되어야 하는데, 컴파일 에러가 뜬다. 결론은, 위에서 변수를 만들 때 꼭 변수의 값을 0이라도 저장하자)

 

 

 

 


 

 

 

 

## switch문

 

int a = 10;

    switch(a) {
        case 10:
            System.out.println("10점");
        case 20:
            System.out.println("20점");
        case 30:
            System.out.println("30점");
        default :
            System.out.println("0점");
    }

 

-break를 걸어줘야, 해당 case문만 실행이 되고 종료로 나가줄 수 있다.

switch(a) {
    case 10:
        System.out.println("10점");
        break;
    case 20:
        System.out.println("20점");
        break;
    case 30:
        System.out.println("30점");
        break;
    default :
        System.out.println("0점");
}

 

 


switch문은 if문과 마찬가지로 조건 제어문이다.   
하지만 switch문은 if문처럼 조건식이 true 일 경우에 블록 내부의 실행문을 실행하는 것이 아니라, 
변수가 어떤 값을 갖느냐에 따라 실행문이 선택된다. 
if문은 조건식의 결과가 true, false 두 가지밖에 없기 때문에 경우의 수가 많아질수록 
else-if를 반복적으로 추가해야 하므로 코드가 복잡해진다. 
그러나 switch문은 변수의 값에 따라서 실행문이 결정되기 때문에 같은 기능의 if문보다 코드가 간결하다. 


switch문은 괄호 안의 값과 동일한 값을 갖는 case로 가서 실행문을 실행시킨다 
만약 괄호 안의 값과 동일한 값을 갖는 case가 없으면 default로 가서 실행문을 실행시킨다. 
default는 생략 가능하다. 



 

-switch문의 case의 경우의 수를 여러개 넣기도 가능하다.

char grade = 'D';

    switch(grade) {
    case 'A' :
    case 'a' :
        System.out.println("우수 회원 입니다.");
        break;
    case 'B' :
    case 'b' :
        System.out.println("일반 회원 입니다.");
        break;
    default :
        System.out.println("손님입니다.");
    }

 

-주사위 돌리기 예제

int dice = 0;

dice =(int) (Math.random()*6)+1;

    switch(dice) {
    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;
    case 5 :
        System.out.println("주사위 눈이 5이 나왔습니다.");
        break;
    default :
        System.out.println("주사위 눈이 6이 나왔습니다.");
        break;
    } System.out.println("주사위 돌리기를 여기서 마칩니다.");

 

 

-등급 뽑기 예제

int rank = 0;
String rankName = " ";

    rank =(int) (Math.random()*6)+1;

    switch(rank) {
    case 1 :
        rankName = "황제";
        break;
    case 2 :
        rankName = "전설";
        break;
    case 3 :
        rankName = "국왕";
        break;
    case 4 :
        rankName = "지도자";
        break;
    case 5 :
        rankName = "리더";
        break;
    default :
        rankName = "평민";
    }

    System.out.println("나의 계급은 " + rankName + "이 나왔습니다.");

 

 

 

연습 문제1)
입력받은 수가 양수인지 음수인지 판단하는 프로그램을 작성하세요
# IF/ELSE 문으로 구성

int num = 50;

    if(num > 0) {
        System.out.println("아하, 이 숫자는 양수군요");
    } else {
        System.out.println("아하, 이 숫자는 음수 입니다.");
    }





연습 문제2)
1) 변수 num1 , num2를 생성 후 임의의 값을 대입
2) num1 , num2중 더 큰수를 출력해야 한다.
# IF/ELSE 문으로 구성


int num1 = 48189;
int num2 = 1235;

    if(num1 < num2) {
        System.out.println(num2);
    } else if (num1 > num2) {
        System.out.println(num1);
    }





연습 문제3)
정수 한 개를 입력받아 홀수인지 짝수인지 판단하는 코드 작성하세요.
# IF/ELSE 문으로 구성



int num = 5084;

    if(num % 2 == 0) {
        System.out.println("이 숫자는 분명히 짝수 입니다.");
    } else if (num % 2 == 1) {
        System.out.println("이 숫자는 분명히 홀수 입니다.");
    }





연습 문제4)
정수 한 개를 입력받아서, 그 수가 3의 배수인지 판단해보자.
# IF/ELSE , SWITCH문으로 구성


int num = 5084;

    if(num % 3 == 0) {
        System.out.println("이 숫자는 확실히 3의 배수 입니다.");
    } else if (num % 3 != 0) {
        System.out.println("아쉽게도 이숫자는 3의 배수가 아닙니다.");
    }

 

int num = 5082;

    switch(num % 3) {
        case 0 :
            System.out.println("이 숫자는 확실히 3의 배수 입니다.");
            break;
        default :
            System.out.println("이 숫자는 3의 배수가 아닙니다.");
    }





연습 문제5)
국어, 영어, 수학 3과목의 평균점수가
90 ~ 100점 = A학점
80 ~ 89점 = B학점
70 ~ 79점 = C학점
60 ~ 69점 = D학점
60미만 = F학점이 출력되도록 조건문을 구성해보자
# IF/ELSE , SWITCH문으로 구성



int koreanScore = 90;
int englishScore = 50;
int mathScore = 87;

int scoreAverage = (koreanScore + englishScore + mathScore) / 3;

char grade = ' ';

if(scoreAverage < 60){
    grade = 'F';
}else if (scoreAverage < 70) {
    grade = 'D';
} else if (scoreAverage < 80) {
    grade = 'C';
} else if (scoreAverage < 90) {
    grade = 'B';
} else if (scoreAverage <= 100) {
    grade = 'A';
} else {
    System.out.println("정확한 값을 입력바랍니다.");
}
System.out.println( "당신의 3과목의 평균 점수는 " + scoreAverage + "점 이며, 당신의 학점은 " + grade + " 입니다.");

 

int koreanScore = 100;
int englishScore = 100;
int mathScore = 87;

int scoreAverage = (koreanScore + englishScore + mathScore) / 3;

char grade = ' ';

switch(scoreAverage / 10) {
    case 10 :
    case 9 :
        grade = 'A';
        break;
    case 8 :
        grade = 'B';
        break;
    case 7 :
        grade = 'C';
        break;
    case 6 :
        grade = 'D';
        break;
    default :
        grade = 'F';
        break;
}

System.out.println( "당신의 3과목의 평균 점수는 " + scoreAverage + "점 이며, 당신의 학점은 " + grade + " 입니다.");






연습 문제6)
요일 번호(1~7)를 입력받아 요일 이름을 출력하는 프로그램을 작성하세요.


switch(day) {
case 1 :
    dayName = "월요일";
    break;
case 2 :
    dayName = "화요일";
    break;
case 3 :
    dayName = "수요일";
    break;
case 4 :
    dayName = "목요일";
    break;
case 5 :
    dayName = "금요일";
    break;
case 6 :
    dayName = "토요일";
    break;
case 7 :
    dayName = "일요일";
    break;
default :
    System.out.println("올바른 요일 번호를 기입해주세요.");
}

System.out.println("내가 기입한 요일 번호에 따른 요일 이름은 " + dayName + " 입니다.");




연습 문제7)
Switch문을 사용하여 음식 종류(한식, 중식, 일식, 양식)를 입력받아 가격대를 출력하는 프로그램을 작성하세요.
-"한식" 입력시 출력 메세지 : 가격대는 5,000원 ~ 30,000원입니다.
-"중식" 입력시 출력 메세지 : 가격대는 7,000원 ~ 40,000원입니다.
-"일식" 입력시 출력 메세지 : 가격대는 10,000원 ~ 50,000원입니다.
-"양식" 입력시 출력 메세지 : 가격대는 15,000원 ~ 60,000원입니다.



String foodType = "일식";
String foodMinPrice = " ";
String foodMaxPrice = " ";

switch(foodType) {
case "한식" :
    foodMinPrice = "5,000원";
    foodMaxPrice = "30,000원";
    break;
case "중식" :
    foodMinPrice = "7,000원";
    foodMaxPrice = "40,000원";
    break;
case "일식" :
    foodMinPrice = "10,000원";
    foodMaxPrice = "50,000원";
    break;
case "양식" :
    foodMinPrice = "15,000원";
    foodMaxPrice = "60,000원";
    break;
} System.out.println("가격대는 " + foodMinPrice + " ~ " + foodMaxPrice + "입니다.");






연습 문제8)
-온라인 쇼핑몰의 할인 시스템을 개발해야 한다. 한 사용자가 어떤 상품을 구매할 때, 
  다양한 할인 조건에 따라 총 할인 금액이 달라질 수 있다.

-각각의 할인 조건은 다음과 같다.
 # 아이템 가격이 10000원 이상일 때, 1000원 할인
 # 나이가 10살 이하일 때 1000원 할인

-이 할인 시스템의 핵심은 한 사용자가 동시에 여러 할인을 받을 수 있다는 점이다.

-예를 들어, 10000원짜리 아이템을 구매할 때 1000원 할인을 받고, 
 동시에 나이가 10살 이하이면 추가로 1000원 더 할인을 받는다. 
 그래서 총 2000원 까지 할인을 받을 수 있다.


int itemPrice = 17000;
int itemSalePrice = 0;
int itemLastPrice = 0;
int age = 8;

if (itemPrice >= 10000) {
    itemSalePrice = 1000;
    if (age <= 10) {
        itemSalePrice = 2000;
        } 
} else if (itemPrice < 10000) {
    itemSalePrice = 0;
    if (age <= 10) {
            itemSalePrice = 1000;
        }
    } 
itemLastPrice = itemPrice - itemSalePrice;
System.out.println("기존 구매 금액은 " + itemPrice + "원 이며, 할인된 금액은 " + itemSalePrice + "원 이며, " + "총 납부해야할 금액은 " + itemLastPrice + "원 입니다.");

 

int price = 15000;
int age = 5;
int discount = 0;

if(price >= 10000 && age <= 10) {
    discount = 2000;
    System.out.println("1만원 이상 구매시 1천원 할인");
    System.out.println("10살 이하는 1천원 추가 할인");
} else if (price >= 10000) {
    discount = 1000;
    System.out.println("1만원 이상 구매시 1천원 할인");
} else if (age <= 10) {
    discount = 1000;
    System.out.println("10살 이하는 1천원 추가 할인");
}
int totalPrice = price - discount;
System.out.println("상품 가격 : " + price);
System.out.println("할인 금액 : " + discount);

 

 

 

 


 

 

 

## For문

 

 

 

 

### 반복문 시작

-반복문은 이름 그대로 특정 코드를 반복해서 실행할 때 사용한다.
-자바는 다음 3가지 종류의 반복문을 제공한다.
 # for
 # while ,  
 # do-while






# 반복문(for문, while문, do-while문)

반복문은 어떤 작업 (코드들)이 반복적으로 실행되도록 할 때 사용되며, 
반복문의 종류로는 for문, while문, do-while문이 있다. 
for문과 while분은 서로 변환이 가능하기 때문에 반복문을 작성할때 어느 쪽을 선택해도 좋지만, 
for문은 반복 횟수를 알고 있을 때 주로 사용하고, while문은 조건에 따라 반복할 때 주로 시용한다. 
while문과 do-while문의 차이점은 조건을 먼저 검사하느냐 나중에 검사 하느냐일 뿐 동작 방식은 동일하다.




# for문
프로그램을 작성하다 보면 똑같은 실행문을 반복적으로 실행해야 할 경우가 많이 발생한다. 
다음 코드를살펴보자.

Example01) 1부터 5까지의 합을 구해보자

class ForhExample01 {
    public static void main(String[] args) {
    int sum = 0;

        sum = sum + 1;
        sum = sum + 2;
        sum = sum + 3;
        sum = sum + 4;
        sum = sum + 5;
        System.out.println(sum);
   }
}

 


상기 코드는 1 부터 5까지의 합을 구하는 것으로 5개의 실행문으로 해결했다. 
하지만 1부터 100까지의 합을 구히는 코드를 같은 방법으로 작성한다면 코드 양이 엄청 늘어난다. 
100개의 실행문이 필요하기 때문이다. 이런경우 for문을 시용하면 코드를 획기적으로 줄여준다.

 


# for문 기본 형식
  for(1초기식;  2조건식;  3증감식){
// 4 실행문
  }

 

//for(초기화식; 조건식; 증감식) {}
for (int i = 0; i < 5; i++) {
    System.out.println("Hello Java~~!!");
}
System.out.println("반복문 종료");

// 초기화 식에 사용된 변수는 for문 블럭 밖에서는 사용할 수 없다.
// for문 내부에서 만들어진 변수도 for문 블럭 밖에서는 사용할 수 없다.

해당 지역변수는 {}를 벗어나는 순간부터 사용할 수가 없다. for문 안쪽에 있는 변수던, main 메서드 안에 있는 변수던 모두 포함된다.



100개의 실행문을 단3라인으로 압축한 것이라고 볼 수 있는데 반복문은 한 번 작성된 실행문을 
여러 번 반복 실행해주기 때문에 코드를 절감하고 간결하게 만들어준다. 
코드가 간결하면 개발 시간을 줄일 수 있고, 오류가 날 확률도 줄어든다. 
for문은 주어진 횟수만큼 실행분을 반복 실행할 때 적합한 반복 제어문이다.

 

// 1 ~ 10까지의 총 합
int sum = 0;	// 이 값을 밖에다가 쓸 필요가 없으면 for문에 밖에서도 사용할 것이면, 변수를 밖에서 저장한다.

for (int i = 1; i <= 10; i++) {
    System.out.println(i + ". i의 현재 값 = " + i);
    sum += i;
    System.out.println("sum의 현재 값 = " + sum);
}
System.out.println("1~10까지 모두 더한 최종 값 = " + sum);

sum 변수를 for문 안쪽에 넣으니 합산이 결과 값으로 나오지 않는다.



1. 초기식이 실행된다. 주로 반복 횟수와 관련된 변수를 선언하고 초기화 할 때 사용한다. 초기식은 딱 1번 사용된다.
2. 조건식을 검증한다. 참이면 코드를 실행, 거짓이면 for문을 빠져나간다. (if문의 조건식과 동일하다.)
3. 코드를 실행한다.
4. 코드가 종료되면 증감식을 실행한다. 주로 초기식에 넣은 반복 횟수와 관련된 변수의 값을 증가할 때 사용한다.
5. 다시 2. 조건식 부터 시작한다. (무한 반복)

 


-for문은 복잡해 보이지만 while문을 조금 더 편하게 다룰 수 있도록 구조화 한 것 뿐이다.
-for문에서 초기식 , 조건식, 증감식은 생략이 가능하다.
 (단 세미콜론(;)은 각 영역을 구분하는 역할이므로 생략이 불가능하다.)

 

 

-짝수만 출력, 홀수만 출력하기 예제

for (int i = 2; i <= 20; i+=2) {
    System.out.println( "짝수만 출력,  i의 현재 값 = " + i);
}

for (int i = 1; i <= 30; i+=2) {
    System.out.println( "홀수만 출력, i의 현재 값 = " + i);
}

 

 

-위의 코드를 if문을 넣어서 for문을 하나만 써줄 수도 있다. (예제 문제)

for(int i = 2; i < 20; i++) {
    if(i % 2 == 0 ) {
        System.out.println("짝수만 출력 : " + i);
    } else {
        System.out.println("홀수만 출력 : " + i);
    }
}

 

 

 

 

-for문을 이용해서 1~100까지 중 짝수의 합계와, 홀수의 합계 구하기 (예제 문제)

int sum1 = 0;
int sum2 = 0;

for(int i = 1;i <= 100;i++) {
    if(i % 2 == 0) {
        sum1 += i;
    } else {
        sum2 += i;
    }
} // for문의 끝
System.out.println("짝수의 총합 = " + sum1);
System.out.println("홀수의 총합 = " + sum2);

 

 

-변수를 지정해주어서, 조건식에 넣어줄 수 있다. (endNum 변수)

int sum = 0;
int endNum = 10;

for (int i = 0; i <= endNum; i ++) {
    sum += i;
}
System.out.println("1부터 " + endNum + "까지의 합 : " + sum);

 

 

-for문과 if문 활용해서 ㄹㅇ찐 주사위 돌리기

for (int i = 0; i < 1000; i++) {

    int str = (int) (Math.random()*8)+1;
    int dex = (int) (Math.random()*8)+1;
    int luk = (int) (Math.random()*8)+1;
    int int1 = (int) (Math.random()*8)+1;

    int status = str + dex + luk + int1;

    if (23 < status &&  status < 25) {
        System.out.println("status 결과 값을 알려드리겠습니다.");
        System.out.println("str = " + str);
        System.out.println("dex = " + dex);
        System.out.println("luk = " + luk);
        System.out.println("int = " + int1);
        break;
    } else {
    }
}

힘법사

 

 

 

## 이중For문

 

-외부 for문과 내부 for문의 메커니즘

-외부 for문이 한 번 실행되면 내부 for문에 주어진 반복문을 모두 수행한 뒤 다시 외부 for문으로 돌아와 재차 실행된다.

// 외부 for문이 한 번 동작하면, 내부 for문이 3번 동작한다.
for (int i = 1; i <= 3; i++) {
    System.out.println("외부 for문 " + i + " 시작");
    for (int k = 1; k <= 3; k++) {
        System.out.println("                   내부 for문");
    }
    System.out.println("외부 for문 종료");
}

 

 

 

-구구단 만들기 (2단 ~9단) (예제 문제)

// 구구단 만들기 (2단 ~ 9단)
for (int i = 2; i<=9; i++) {
    System.out.println("======= 구구단 " + i + "단 Start =======");
    for (int k = 1; k<=9; k++) {
        System.out.println("                            " + i + " * " + k + " = " +( i*k) + "                 " );
    } 
} System.out.println("========= 구구단 종료 =========");

 

 

 

-1, 2, 3, 4, 5, 6, 7, 8, 9, 10 순서대로 출력하기 (예제 문제)

for (int i = 1; i <= 10; i++) {
    System.out.print(i);
    if (i < 10) {
        System.out.print(", ");
    }
}

 

 

 

 

 

# break문 사용

 

 

-위에서 switch문에서 사용했듯이, 반복문에서도 break가 사용이 가능하다.

 

 

 

-랜덤 숫자 6이 나오게 되면은 즉시 반복문을 종료하는 break문 활용

int i = 0;

while(i<500) {
    i++;
    int num = (int) (Math.random()*6) + 1;
    System.out.println("돌려돌려 돌림판 당신에게 나온 숫자는 " + num + "입니다.");
    if (num == 6) {
        System.out.println("드디어 당첨이 되셨네요.. 그만 멈추겠습니다." + num);
        break;
    }
} System.out.println("이번에는 " + i + "번째만에 당첨되었습니다.");

충격적인 당첨 횟수

 

 

-1부터 쭉 더하면서 총합이 100이 넘어가면 멈추겠다는 예제

// 총합이 100이 넘어가면 멈추겠다.
int i = 0;
int sum = 0;

while(true) {
    sum += i;
    if(sum > 100) {
        System.out.println("sum " + sum);
        break;
    }
    i++;
}

 

 

 

-break문은 제일 가까운 for문을 종료시키는 것 밖에 하지 못한다. (외부 for문은 종료하지 못한채, 아래 코드는 계속 내부 for문만 종료하게 된다.)

for (char upper = 'A'; upper <= 'Z'; upper++) {
    for (char lower = 'a'; lower <= 'z'; lower++) {
        System.out.println(upper + "-" + lower);
        if (lower == 'g') {
            break;
        }
    }
    System.out.println(" ");
}

 

 

-for문 앞에 이름을 지정해주면, 내부 for문이 끝나서 break가 걸리면, 외부 for문이 전체 종료된다. 

collect: for (char upper = 'A'; upper <= 'Z'; upper++) {
    for (char lower = 'a'; lower <= 'z'; lower++) {
        System.out.println(upper + "-" + lower);
        if (lower == 'g') {
            break collect;
        }
    }
    System.out.println(" ");
}

 

 

 

 


 

 

 

 

 

## while문

 

 

-for문과 달리 초기화식, 조건식, 증감식을 따로 적어줘야하는 불편함이 있다.

int i = 1;

while (i <= 10) {
    System.out.println(i);
    i++;
}

 

 

-1 ~ 100 사이에 홀수를 출력하는 예제

int i = 0;
while (i<100) {
    i++;
    if (i % 2 == 1) {
        System.out.println(i);
    }
}

 

 

-1 ~ 100 사이에 짝수의 총합, 홀수의 총합 예제

int i = 0;
int sum1 = 0;
int sum2 = 0;

while (i<100) {
    i++; // 증감식을 넣는 위치에 따라 더해진다.
    if (i % 2 == 0) {
        sum1 += i;
    } else {
        sum2 +=i;
    }
} System.out.println("짝수의 합계 = " + sum1);
System.out.println("홀수의 합계 = " + sum2);

 

 

-while문으로 구구단 만들기 (2단 ~ 9단)

int i = 2;
int k = 1;

while (i<=9) {
    System.out.println("구구단 " + i + "단 시이작~~");
    while (k<9) {
        k++; 
        System.out.println(i + " X " + k);
    } k=0; i++; // k를 한 번 초기화 시켜줘야 한다.
} System.out.println("구구단 끝~~");

 

 

 

 

 

# do-while문

 

 

-꼭 한 번은 실행문을 실행시키고 싶을 때 do-while문을 사용한다.

 

 

-해당 while문의 조건식이 false이므로, do에 넣은 실행문만 한 번 실행이 되고 값은 출력되지 않는다.

int i = 10;

do {
    System.out.println("현재 숫자 : " + i);
    i++;
} while(i < 3);

 

 

 


 

 

 

## continue문(건너뛰기)

 

 

-쉽게 얘기해서 그냥 해당 조건문을 건너뛰어 버리는 개념이라고 생각하자.

-홀수를 건너뛰어버리는 continue문 예제

for(int i = 1; i <= 10; i++) {
    if(i % 2 != 0) {
        continue;
    }
    System.out.println(i);
}

int i = 1;

while(i <= 5) {
    if (i == 3) {
        i++;
        continue;
    }
    System.out.println(i);
    i++;
}

 

 

연습문제 1) 문제: 자연수 출력
처음 10개의 자연수를 출력하는 프로그램을 작성해 보세요. 이때,  count 라는 변수를 사용해야 합니다.
while문, for문 2가지 버전의 정답을 만들어야 합니다.

출력 예시:

1
2
3
4
5
6
7
8
9
10

 

int count = 0;
for(count=1;count<=10;count++) {
    System.out.println(count);
}
int count = 1;
while (count<=10) {
    System.out.println(count);
    count++;
}

 





연습문제 2) 문제: 짝수 출력

반복문을 사용하여 처음 10개의 짝수를 출력하는 프로그램을 작성
while문, for문 2가지 정답을 만들어야 합니다.


int num = 0;

for (num=1;num<=20;num++) {
    if(num % 2 ==0) {
        System.out.print(num + ", ");
    }
}
int num = 0;

while (num < 20) {
    num++;
    if (num % 2 == 0) {
        System.out.print(num + ", ");
    }
}






연습문제 3) 문제: 누적 합 계산

반복문을 사용하여 1부터 max 까지의 합을 계산하고 출력하는 프로그램을 작성
이때, sum 이라는 변수를 사용하여 누적 합을 표현하고, i 라는 변수를 사용하여 카운트
(1부터 max까지 증가하는 변수)를 수행
while문, for문 2가지 버전의 정답을 만들어야 합니다.

int sum = 0;

for (int i = 1; i<=100; i++) {
    sum +=i;
    System.out.println("`1부터 " + i + "까지의 합계 = " + sum);
}
int sum = 0;
int i = 0;

while (i<100) {
    i++;
    sum += i;
    System.out.println("`1부터 " + i + "까지의 합계 = " + sum);
}








연습문제 4) 
for문을 이용해서 1부터 100까지의 정수 중에서 3의 배수의 총합을 구하는 코드를 작성하시오.



int sum = 0;
int k = 0;

for(int i = 1; i <= 100; i++) {
    if (i % 3 == 0) {
        sum += i;
        k++;
        System.out.println(k + "번째의 " + sum + "의 현황");
    }
} System.out.println("3의 배수의 총합 = " + sum);






연습문제 5) 
while문과 Math.random()메소드를 이용해서 두 개의 주사위를 던졌을 때 나오는 눈을 (눈1, 눈2) 형태로 출력하고, 눈의 합이 5가 아니면 계속 주사위를 던지고, 눈의 합이 5이면 실행을 멈추는 코드를 작성하시오



while (true) {
    int dice1 = (int) (Math.random() *6) + 1;
    int dice2 = (int) (Math.random() *6) + 1;
    System.out.println("첫 번째 눈의 값 : " + dice1 + " 두 번째 눈의 값 : " + dice2);
    if ((dice1 + dice2) == 5) {
        System.out.println("드디어!! 두개의 눈의 값이 합 5가 되었습니다.");
        break;
    }
}







연습문제 6) 문제와 풀이2

문제: 구구단 출력
중첩 for문을 사용해서 구구단을 완성해라.
중첩 while문을 사용해서 구구단을 완성해라.




for (int i = 2; i <= 9; i++) {
    System.out.println("== 구구단 " + i + "단 ==");
    for (int k = 1; k <= 9; k++) {
        System.out.println(i + " X " + k + " = " + (i * k));
    }
} System.out.println("구구단을 종료하겠습니다. 감사합니다.");
int i = 2;
int k = 1;
while (i<=9) {
    System.out.println("구구단을 외자 구구단을 외자 " + i + "단 STart");
    while (k<=9) {
        System.out.println(i + " X " + k + " = " +  (i*k));
        k++;
    } i++; k=1;
}






연습문제 7) 문제: 피라미드 출력
int rows 를 선언해라.
이 수만큼 다음과 같은 피라미드를 출력하면 된다.
참고:  println() 은 출력후 다음 라인으로 넘어간다. 라인을 넘기지 않고 출력하려면 print() 를 사용하면 된다.
 
*
**
***
****
*****

for (int i = 1; i <= 5; i++) {
    for (int rows = 1; rows <= i; rows++) {
        System.out.print("*");
    } System.out.println(" ");
}
int rows = 5;
String star = "*";

for (int i = 1; i <= rows; i++) {
    System.out.print(star);
    System.out.println();
    star += "*";
}
int j = 1;
int rows2 = 5;

String star2 = "*";
while (j <= rows2) {
    System.out.print(star2);
    System.out.println();
    star2 += "*";
    j++;
}






연습문제 8) 1 ~ 20까지의 숫자 중 2,3의 배수만 빼고 합한 값을 구해라.
           ( for - continue를 사용해서 / while - break 를 사용해서 코딩해라. )

int i = 0;
int sum = 0;

for (i = 1; i <= 20; i++) {
    if (i % 2 == 0 || i % 3 == 0) {
        continue;
    }
    sum += i;
    System.out.println("sum의 현재 값 = " + sum);
} System.out.println(sum);
int i = 0;
int sum = 0;

while (true) {
    if(i > 20) {
        break;
    }
    i++;
    if(i % 2 == 0 || i % 3 == 0) {
        continue;
    }
    sum += i;
} System.out.println(sum);




연습문제 9) 
-Math.random() 메서드를 사용하여 국어 점수를 랜덤(30 ~ 100사이의 값)하게 받아야 한다.
-Math.random() 메서드를 사용하여 수학 점수를 랜덤(30 ~ 100사이의 값)하게 받아야 한다.
-Math.random() 메서드를 사용하여 영어 점수를 랜덤(30 ~ 100사이의 값)하게 받아야 한다.

-평균 점수 90점 이상인 모든 학생과 그 학생의 정보가 출력되어야 한다.
 # 학생 번호 출력
 # 국어 점수 출력
 # 수학 점수 출력
 # 영어 점수 출력
 # 총점 출력
 # 평균 점수 출력

for (int i = 1; i <= 100; i++) {
    int korScore = (int) (Math.random() * 70) + 30; 
    int mathScore = (int) (Math.random() * 70) + 30; 
    int engScore = (int) (Math.random() * 70) + 30;
    int allScore = korScore + mathScore + engScore;
    double averageScore = (double) allScore / 3;

    if (averageScore >= 90) {
        System.out.println("#학생 번호 = " + i);
        System.out.println("#국어 점수 = " + korScore);
        System.out.println("#수학 점수 = " + mathScore);
        System.out.println("#영어 점수 = " + engScore);
        System.out.println("#총 점수 = " + allScore);
        System.out.println("#평균 점수 = " + averageScore);
        System.out.println("=================");
    }
}
반응형

'java(2)↗' 카테고리의 다른 글

java 클래스(2)  (0) 2024.04.22
java 클래스  (0) 2024.04.19
java 데이터 참조 타입  (0) 2024.04.18
java 연산자  (0) 2024.04.15
java특  (2) 2024.04.12