티스토리 뷰

728x90
반응형

배열에 관한 두번째 게시물이다. 첫번째 게시물은 아래 링크!

https://live-for-myself.tistory.com/86

 

[Java] Array 배열 #1 / 확장 for문, Class 객체 배열 생성하기, 입력받은 값을 배열에 집어넣기

자바에도 배열이 존재한다. 하지만 자바스크립트와 다른 점은, 자바스크립트에서는 push(), splice() 등을 통해 배열에 원소를 추가, 삭제함으로써 배열의 크기를 조정할 수 있었지만, 자바는 처음

live-for-myself.tistory.com

 

오늘도 배열 관련 여러 예제들을 풀어보자 :)


배열에서 Random 사용해보기


문제

String[] items = {"cherry", "apple", "banana", "melon", "7"};

Q1. cherry, apple, banana, melon, 7의 5개의 문자열 중 한개가 랜덤하게 출력되게 해보세요.

Q2. 5개의 문자열 중에서 3개가 한 줄에 한 번에 랜덤하게 출력되게 해보세요.

 

출력형태

banana | cherry | 7

melon | apple | apple

7 | 7 | 7

 

Q3. Q2와 같이 출력했을 때, 세 문자열이 동일하다면 특정 점수가 출력되게 해보세요.

 

모두 "cherry"일 때: "10점 입니다." 출력.

모두 "apple"일 때: "20점 입니다." 출력.

모두 "banana"일 때: "30점 입니다." 출력.

모두 "melon일 때: "40점 입니다." 출력.

모두 "7"일 때: "1000점 입니다." 출력.

세 문자열 중 어느 하나라도 다를 때: "0점 입니다." 출력.


sol 1-1) 랜덤하게 출력되도록 하라 했으니, Random을 import한다.

import java.util.Random;

 

sol 1-2) Random 객체를 생성한다.

Random rand = new Random();

 

sol 1-3) 다섯 가지 중 하나가 출력되어야 하므로, 배열의 방번호 0~4를 범위값으로 활용한다. 

인덱스 값은 int이므로 nextInt() 메소드를 이용하고, nextInt() 안에 넣는 값은, 그 값을 미만으로 하는 정수를 랜덤하게 뽑도록 하기 때문에, nextInt(5)로 한다.

 

방번호를 랜덤하게 뽑았으므로, 뽑은 방번호에 해당하는 item의 원소는 items[rand.nextInt[5]]이다.

따라서, 출력까지의 코드는 다음과 같다.

System.out.println(items[rand.nextInt(5)]);

 

전체 코드 - MainClass07.java

package test.main;

import java.util.Random;

public class MainClass08 {
	public static void main(String[] args) {
		/*
	       * hint
	       * 
	       * String[] items={"cherry", "apple", "banana", "melon","7"};
	       * 
	       * 2. 5개의 문자열 중에서 3개가 한줄에 한번에 랜덤하게 출력되게 해 보세요
	       * 
	       */
		String[] items = {"cherry","apple","banana","melon","7"};
		
		Random rand = new Random();
		System.out.println(items[rand.nextInt(5)]);
		
		
		
	}
}

 


sol 2-1) 이번에는 3개를 랜덤하게 뽑아야하므로 배열을 활용하면 좋다. 

방이 3개짜리인 배열을 선언한다.

int [] nums = new int[3];

 

sol2-2) 3회 동안, 즉, nums.length 동안, 3개를 랜덤하게 뽑는다.

for(int i=0;i<nums.length;i++) {
	nums[i] = rand.nextInt(5);
}

 

sol2-3) 랜덤하게 뽑은 값을 인덱스로 하는 items의 원소를 먼저 출력하는 코드를 for문안에 넣는다.

이때, "banana | cherry | 7"과 같은 형태로 출력되어야하므로 개행을 하지 않는다. 

for(int i=0;i<nums.length;i++) {
	nums[i] = rand.nextInt(5);
	System.out.print(items[nums[i]]);

}

 

sol2-4) 원소와 원소 사이에 " | "이 출력되어야 하고, 3번째 원소 출력 후에는 " | "이 출력되면 안되므로, 인덱스가 2가 아닐 때, 즉, 마지막 원소가 아닐 때 " | "를 출력하는 코드를 for문안에 넣는다.

for(int i=0;i<nums.length;i++) {
	nums[i] = rand.nextInt(5);
	System.out.print(items[nums[i]]);
	if(i!=2) {
		System.out.print(" | ");
	}
}

 

 

전체 코드 - MainClass08.java

package test.main;

import java.util.Random;

public class MainClass08 {
	public static void main(String[] args) {
		/*
	       * hint
	       * 
	       * String[] items={"cherry", "apple", "banana", "melon","7"};
	       * 
	       * 2. 5개의 문자열 중에서 3개가 한줄에 한번에 랜덤하게 출력되게 해 보세요
	       * 
	       */
		String[] items = {"cherry","apple","banana","melon","7"};
		
		Random rand = new Random();
		System.out.println(items[rand.nextInt(5)]);
		int [] nums = new int[3];
		for(int i=0;i<nums.length;i++) {
			nums[i] = rand.nextInt(5);
			System.out.print(items[nums[i]]);
			if(i!=2) {
				System.out.print(" | ");
			}
		}
	}
}

sol3 

다음과 같은 프로세스로 코드를 작성하였다.

 

1) for문을 돌며, 0번째 수와 i번째 수가 같다면 계속해서 반복문을 수행한다.

2) 만약 그렇지 않다면(0번째 수와 i번째 수가 다르다면) "0점 입니다."를 출력하고 포문을 나온다.

3) 만약 0번째 수와 i번째 수가 같은데 인덱스가 2이고 (마지막 원소라면) 모든 원소가 "7"이 아니라면 nums에서 원소에 해당하는 (방번호+1)*10을 점수로하는 문자열을 출력한다. 

(체리는 0번째 방 원소이고 10점이고, 인덱스가 1 증가할수록 10점이 증가하기 때문에)

4) 만약 모든 원소가 "7"이라면 "1000점 입니다."를 출력한다.

 

 

전체 코드 - MainClass08.java

package test.main;

import java.util.Random;

public class MainClass08 {
	public static void main(String[] args) {
		/*
	       * hint
	       * 
	       * String[] items={"cherry", "apple", "banana", "melon","7"};
	       * 
	       * 2. 5개의 문자열 중에서 3개가 한줄에 한번에 랜덤하게 출력되게 해 보세요
	       * 
	       */
		String[] items = {"cherry","apple","banana","melon","7"};
		
		Random rand = new Random();
		System.out.println(items[rand.nextInt(5)]);
		int [] nums = new int[3];
		for(int i=0;i<nums.length;i++) {
			nums[i] = rand.nextInt(5);
			System.out.print(items[nums[i]]);
			if(i!=2) {
				System.out.print(" | ");
			}
		}
		System.out.println();
		
		
		for(int i=1;i<nums.length;i++) {
			//0번째 숫자와 i번째 수가 같다면
			if(nums[i]==nums[0]) {
				// 숫자 3개가 모두 같다면
				if(i==2) {
					//7 7 7이 아니면
					if(nums[0]!=4) {
						System.out.println((nums[0]+1)*10+"점 입니다.");
					}
					//7 7 7 이면 1000출력
					else {
						System.out.println("1000점 입니다.");
					}	
				}				
			}
			//숫자 3개 중 어느 것 하나라도 같지 않다면 0점입니다 출력하고 포문 나오기
			else {
				System.out.println("0점 입니다.");
				break;
			}
		}
	}
}
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함