국비교육(22-23)

16일차(1)/java 퀴즈 : Array, Random 활용 예제

서리/Seori 2022. 10. 27. 13:17

221026 퀴즈

- 배열 안에서 랜덤하게 값을 출력하기

 

 

1. run 했을 때
   cherry, apple, banana, melon, 7
   5개 문자열중에서 1개가 랜덤하게 출력되게 해보세요.
   
  2. run 했을 때
    5개의 문자열 중에서 3개가 한줄에 한번에 랜덤하게 출력되게 해보세요.
  예) cherry | apple | cherry, 7 | apple | melon, 7 | 7 | 7

 


 

<내가 작성한 코드>

package test.main;

import java.util.Random;

public class Quiz1026 {
	public static void main(String[] args) {
		/* 1. run했을때
		 *	 cherry, apple, banana, melon, 7
		 *	 5개 문자열중에서 1개가 랜덤하게 출력되게 해보세요.
		 * 
		 * 2. run 했을 때
		 *   5개의 문자열 중에서 3개가 한줄에 한번에 랜덤하게 출력되게 해보세요.
		 *	예) cherry|apple|cherry, 7|apple|melon, 7|7|7
		 *
		 * - hint
		 * String[] items={"cherry", "apple", "banana", "melon", "7"}
		 * 
		 * Random ran=new Random();
		 * int ranNum=ran.nextInt(5);
		 */
		String[] items={"cherry", "apple", "banana", "melon", "7"};
		Random ran=new Random();
		int ranNum=ran.nextInt(5);		
		System.out.println(items[ranNum]);
		
		Random ran2=new Random();
		int r1=ran2.nextInt(5);
		int r2=ran2.nextInt(5);
		int r3=ran2.nextInt(5);		
		System.out.print(items[r1]+" | "+items[r2]+" | "+items[r3]);
		
		if(items[r1]==items[r2] && items[r2]==items[r3]) {
			System.out.println("축하드립니다! 상금을 받아가세요.");
		}
	}
}

 

 


 

1번)

package test.main;

import java.util.Random;

public class QuizMain {
	public static void main(String[] args) {
		String[] items={"cherry", "apple", "banana", "melon", "7"};
		//랜덤한 숫자를 얻어내기 위한 객체
		Random ran=new Random();
		//0~4사이의 랜덤한 숫자를 하나 얻어내서
		int ranNum=ran.nextInt(5);
		//배열의 인덱스로 활용해서 문자열 출력하기
		System.out.println(items[ranNum]);		
	}
}

 


 

2번)

package test.main;

import java.util.Random;

public class QuizMain2 {
	public static void main(String[] args) {
		String[] items={"cherry", "apple", "banana", "melon", "7"};
		//랜덤한 숫자를 얻어내기 위한 객체
		Random ran=new Random();
		
		for(int i=0; i<3; i++) {
			//0~4사이의 랜덤한 숫자를 하나 얻어내서
			int ranNum=ran.nextInt(5);
			//배열의 인덱스로 활용해서 문자열 출력하기
			System.out.print(items[ranNum]);
			if(i<2) {
				System.out.print(" | ");			
			}
		}		
	}
}

 

- items라는 배열안에서 랜덤 숫자를 3개 얻어내려면 아래 코드가 3번 반복되면 된다.

int ranNum=ran.nextInt(5);
System.out.println(items[ranNum]);

→ 위 코드를 3번 반복되는 for 문 안에 넣기!

 

- \r\n 또는 \n : 윈도우에서의 개행기호

- " | " 출력을 for 문 안에 넣고, 맨 끝을 빼려면 if문을 사용하면 된다.

 


 

3번) 점수 부여하기

package test.main;

import java.util.Random;

public class QuizMain2 {
	
	/*
	 * 3개가 모두 같게 나왔다면 10점을 부여하기
	 */
	
	public static void main(String[] args) {
		String[] items={"cherry", "apple", "banana", "melon", "7"};
		//랜덤한 숫자를 얻어내기 위한 객체
		Random ran=new Random();
		
		//for문 안에서 얻어낸 랜덤한 숫자 3개를 저장할 배열 객체 생성
		int[] nums=new int[3];
		
		for(int i=0; i<3; i++) {
			//0~4사이의 랜덤한 숫자를 하나 얻어내서
			int ranNum=ran.nextInt(5);
			//배열의 인덱스로 활용해서 문자열 출력하기
			System.out.print(items[ranNum]);
			if(i<2) {
				System.out.print(" | ");			
			}
			//배열에 일어난 랜덤한 숫자를 저장하기
			nums[i]=ranNum;
		}
		//개행
		System.out.println();
		//nums 배열에 저장된 3개의 숫자가 모두 같은지 여부를 boolean type으로 얻어내기
		boolean isEqual = nums[0]==nums[1] && nums[1]==nums[2];
		if(isEqual) {
			System.out.println("10점입니다.");
		} else {
			System.out.println("0점입니다.");
		}
	}
}

- 점수를 부여하려면 for 문 안에서 일어났던 일을 어딘가에 저장한다.
  이 안에서 발생한 랜덤한 숫자를 배열에 저장하는 것!

- for문은 3번 반복되는데, 미리 만들어둔 nums 배열에 i가 바뀔 때마다 하나씩 넣어준다.
→ for문이 다 수행된 이후에도 배열에는 숫자들이 들어가있다.

 

boolean isEqual = nums[0]==nums[1] && nums[1]==nums[2];
- isEqual에 3개의 값이 같은 경우의 boolean 값을 대입해준다.


 

4번. 2개만 같아도 점수 부여하기

package test.main;

import java.util.Random;

public class QuizMain04 {
	
	/*
	 * 3개가 모두 같게 나왔다면 10점
	 * 2개만 같으면 5점
	 */
	
	public static void main(String[] args) {
		String[] items={"cherry", "apple", "banana", "melon", "7"};
		//랜덤한 숫자를 얻어내기 위한 객체
		Random ran=new Random();
		
		//for문 안에서 얻어낸 랜덤한 숫자 3개를 저장할 배열 객체 생성
		int[] nums=new int[3];
		
		for(int i=0; i<3; i++) {
			//0~4사이의 랜덤한 숫자를 하나 얻어내서
			int ranNum=ran.nextInt(5);
			//배열의 인덱스로 활용해서 문자열 출력하기
			System.out.print(items[ranNum]);
			if(i<2) {
				System.out.print(" | ");			
			}
			//배열에 일어난 랜덤한 숫자를 저장하기
			nums[i]=ranNum;
		}
		//개행
		System.out.println();
		//3개의 숫자가 모두 같은지 여부
		boolean isAllEqual = nums[0] == nums[1] && nums[1] == nums[2];
		//2개가 같은지 여부
		boolean isTwoEqual = nums[0] == nums[1] || nums[1] == nums[2] || nums[0] == nums[2];
		//점수는 10, 5, 0
		if(isAllEqual) {
			System.out.println("10점입니다.");
		}else if(isTwoEqual) {
			System.out.println("5점입니다.");
		}else {
			System.out.println("0점입니다.");
		}
	}
}

boolean isAllEqual = nums[0] == nums[1] && nums[1] == nums[2];
boolean isTwoEqual = nums[0] == nums[1] || nums[1] == nums[2] || nums[0] == nums[2];

- isAllEqual, isTwoEqual 이라는 변수에 boolean 값을 넣어준다.

 


 

5번) 최초 포인트 지급, 3개의 값이 같으면 포인트 부여 (100점 누적하면 상금?)

package test.main;

import java.util.Scanner;

public class TestMain {
	public static void main(String[] args) {		
		
		int point=1000;
		Scanner scan=new Scanner(System.in);
		while(true) {
			//만일 point가 0이면			
			if(point == 0) {
				break;//반복문 loop 탈출
			}
			System.out.println("Enter를 치세요.");
			//Enter를 칠 때까지 블로킹되는 메소드 호출
			scan.nextLine();
			//point를 10 감소시키면서
			point -= 10;
			//원하는 작업 수행(앞선 예제의 for~boolean~if 문을 이 안에 넣기)
			System.out.println("수행중...");			
		}
		System.out.println("main 메소드가 종료됩니다.");
	}
}

- 처음에 포인트를 1000 제공한 후 상금을 부여한다.

  1회 시행할 때마다 10씩 차감해서 0이 되면 반복문을 종료한다.

- 위 코드는 반복할때마다 포인트를 차감하는 코드! 이 코드에 앞 예제의 for~if 문을 넣어주면 된다.

 

while( ){ }; : () 안의 값이 true이면 반복한다.
- 반복문 while은 () 안의 값이 false가 될 때까지 무한대로 돌아간다.

- break 는 while문을 탈출한다는 의미이다.

  break 위에 커서를 올려놓으면 while문에 음영이 생기는 것을 확인할 수 있다.
break는 가장 인접한 반복문을 탈출하는 기능!

 

 

- 배열의 활용, 객체 생성, 메소드 호출 / for문, if문, 비교연산자, 논리연산자 /
  반복수행, 조건부수행, 논리값 계산, 비교 등 다양한 기능을 사용하는 코드!