본문 바로가기
개발일지

개발 일지 9일차 -While문 , Random 메서드-

by 태운콩즙 2023. 12. 6.
728x90
반응형

오늘은 while문을 배웠다

while문은 2가지로 나뉘는데

 

while문과

do while 문으로 나뉜다

 

둘의 차이점은

while 문은 조건을 만족할때 반복 실행 하게 되고

조건을 만족 하지 못하면 실행이 안된다

do while 문은 조건을 따지기 전에 한번은 실행이 되고

조건을 만족하해야만 반복 실행하게된다

 

기본적인 문법으로는

<while문>

 int i = 1;
        while(i<=3){
            System.out.println("i = " + i);
            i++;
        }

(i 값이 3과 같거나 커질때 i값을 출력해주고 i값은 1씩 늘어난다)

<do while문>

    int j = 1;
        do {
            System.out.println("j = " + j);
            j++;
        }while (j<=3);
        System.out.println("do while 종료후 j= " +j);

( 위와 조건은 같지만 do 에서 한번 실행이 된후 반복 실행)

 

<Random 메서드>

Random 메서드 란 지정한 범위 내에서 숫자를 무작위로 발생 시키게 된다

 

< Random 메서드 문법>

package Ch07_while;

public class Ex03_Random {
    public static void main(String[] args) {
        //Random 메서드: 지정한 범위 내에서 숫자를 무작위로 발생시킴
        //1~10 사이의 정수
        //(int) (Math.random() * 10) + 1

        //Math 클래스의 random() 메서드
        // 메서드: 어떤 출력(리턴 타입) =>double (0.0~1.0)
        System.out.println(Math.random());
        // 결과값에 10을 곱해서 정수 부분을 만듦
        System.out.println(Math.random() * 10);
        // 결과값에 45을 곱해서 정수 부분을 만듦
        System.out.println(Math.random() * 45);
        //실수(double)=> 정수(int) : 형 변환(type conversion)
        System.out.println((int)(Math.random() * 10)); // 0이상 9이하의 정수
        System.out.println((int)(Math.random() * 10) +1); //1이상 10 이하의 정수
        System.out.println((int)(Math.random() * 45) +1); //1 이상 45 이하의 정수

        // 형 변환
        int int1 = 10;
        double double1 = 1.2345678;
        
        // 정수형 변수를 실수형에 대입
        double double2 = int1;
        System.out.println("double2 = " + double2);

        //실수형 변수를 정수형 변수에 대입(강제 형변환)
        int int2 = (int) double1;// 형변환 에러
        System.out.println("int2 = " + int2);
    }
}

 

- while문 응용-

<예문1>

package Ch07_while;

public class Ex02_whileEx {
    public static void main(String[] args) {
        /**
         * while문으로 1부터 10까지의 합계 출력
         * 1+2+3+4+5+6+7+8+9+10 =55
         */
        int i = 1;
        int sum =0;
        while (i <= 10) {
            if (i < 10){
                System.out.print(i+"+");
            }else {
                System.out.print(i+"=");
            }
            sum +=i;
            i++;

        }
        System.out.println(sum);

        }
    }

지난 시간에 for문과 같은 문제지만 while 문을 사용해서 만들어야 한다

while문은 for문처럼 while문 안에 if 문을 넣을 수있다

위 코드를 해석 하자면

i값이 10보다 작거나 같을때까지 반복 실행을 하게 되는데

안에 if문을 사용하여 i값이 10보다 작을때 +라는 문자를 출력 

그 외에 경우에서는 =을 출력 한다

변수 sum에 1을 더하고

1은 반복될때마다 중첩을 해준다

 

<예문 4>

package Ch07_while;

public class Ex04_whileEx {
    public static void main(String[] args) {
        /**
         *
         random 메서드를 이용해서 1~6이 나오는 주사위를 설정하고
         주사위가 계속 던져지면서 6이 나오면 종료되는 코드
         */

        int i = 0;

        while (i <=6) {
            i= (int)(Math.random() * 6)+1;
            System.out.println(i);

            if (i == 6){
                break;
            }




        }
    }
}

while 문과  random 메서드를 활용하여서 주사위를 만들었다

위 코드를 해석하면

변수 i 가 6보다 작거나 클때까지 반복을 하고

i값은 1~6사이의 정수가 랜덤으로 나오게 된다

만약 i 값이 6과 같아지면 작동을 멈춘다

<예문 5>

package Ch07_while;

import java.util.Scanner;

public class Ex05WhileEx {
    public static void main(String[] args) {
        /** random 메서드 를 이용 해서 1~100 사이의 숫자를 하나 만들고
         * 반복문 안에서 해당 숫자를 맞출 때 까지 계속 숫자를 입력 받도록 하고
         * 숫자를 맞추면 종료 하고 몇 번만에 맞 췄 는 지 를 출력 해줌
         */
        Scanner scanner = new Scanner(System.in);



        int i= ((int) (Math.random()*100)+1);
        System.out.print("숫자를 입력하세요");
        int j = 0;
        int k = 0;

        while (true){
            j = scanner.nextInt();
           if (i == j ){
               k+=1;
               System.out.println("정답 입니다");
               System.out.println("총 시도 횟수는" + k +  "입니다");
           }else if (i > j){
               System.out.println("더 큰 수를 입력 하세요");
               k+=1;
           }else if (i < j){
               System.out.println("더 작은 수를 입력 하세요");
               k+=1;
           }



        }



    }
}

예문 4와 같이 while와 random 메서드를 활용하여서 up&down 게임을 만들었다

위 코드는 스케너를 사용하여 수를 입력받고 랜덤으로 받은 수와 비교하여 같은 수가 나오게 되는것이다

해석해보자면

우선 랜덤으로 수를 받아야 하는데 while 안에 지역변수로 들어가게되면 수를 입력 할때마다 랜덤값이 바뀌기 때문에 전역 변수로 사용하여 랜덤값을 한번만 받아 주어야 한다

그리고 j 값을  while 안에 지역 변수 입력 값으로 지정해준뒤

j값이 i값과 같을때 정답입니다 와 총 시도 횟수를 출력하면 참이 되면서 반복을 멈추게 된다

그 외에 i값보다 j값이 크거나 작은 경우 설명을 해주고 횟수를 1씩 증가하게 만들어 주었다

<예문6>

package Ch07_while;

import java.util.Scanner;

public class Ex_06WhileEx {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = 0;
        int count = 0;
        int sum = 0;

        System.out.println("정수를 입력 하고 마지막 에 0을 입력 하세요");
        while (true) {
            num = scanner.nextInt();
            if (num == 0){

                System.out.println("입력한 숫자는" +sum+ "개 입니다");
                System.out.println("평균은"+count / sum+"입니다");
                break;

            }else{
                sum++;
                count +=num;
            }
        }
    }
}

위 코드는 정수값을 입력하고 마지막은 0을 넣어서 그 안에 0을 제외한 정수가 몇개이고 그 수의 평균값을 구하는 코드이다

 

while 문 안에 수를 입력할 스케너를 넣어주고

변수 num이 0이 입력되면 입력한 숫자와 평균값을 출력해주고 작동을 멈추게 해주고

그 외의 경우 입력한 숫자가 합쳐지도록 sum 이라는 변수가 중첩되게 만들어주고

count 안에 입력 한 수끼리 더해지게 만들어 주었다

그리고 출력값 안에 count 값 나누기 sum 을 해주면 평균값이 출력이 된다

<예문 7>

package Ch07_while;

public class Ex07_WhileEx {
    public static void main(String[] args) {
        //합계용 변수
        int sum = 0;
        //1,2,3,4,~~~
        int count = 1;
        //1, -2 ,3,-4~~~
        int num = 0;
        //부호용 변수
        int s = 1;
        boolean run = true;
        while (run){
            sum += num;
            if (sum >=100){
                run = false;
            }else {
            num = s * count;
            s = -s; // 1, -1 , 1, -1
            count++;

            }
        }
            System.out.println("num = " + num);
        System.out.println("sum = " + sum);
    }
}

1+(-2)+3+(-4)~~~~를 하여 합계가 100이 되었을때 나오는 수의 합

우선 합계용 변수 sum과 양수를 지정해줄 count 음수로 변활될 변수 num 부호용 변수 s 를 만들어주고

sum 안에 num을 더한값을 넣어주고

sum 값이 100보다 크거나 같을때 작동을 중지해준다

그 외에 경우

num은 한번 반복 될때 마다 s와 count를 곱해주고

s 값은 음수가 된다

그리고 count 는 계속 중첩이 되게 만들어준다

 

728x90
반응형