본문 바로가기
Java/Java 문제

[Java] 배열_실습문제(easy & hard)

by 콧등치기국수 2021. 5. 5.

1. EASY

쉬운 문제이지만 순간 생각이 나지 않았다. 다음에는 바로 기억해야지

public void method8() {
		//정수 배열크기5, 1~10 사이의 짝수 담기
		
		int[] arr = new int[5];
		
		int num=0;
		for(int i=0; i<arr.length; i++) {
			arr[i] = num+=2;
		}
		
		for(int i=0; i<arr.length; i++) {
			System.out.println(arr[i]);
		}
		
		System.out.println("arr의 길이 : " + arr.length);         //길이
		System.out.println("arr의 해시코드 : " + arr.hashCode());  //주소값
	
		arr = new int[10];
		
		System.out.println("======= 크기변경 후 arr =======");
		System.out.println("arr의 길이 : " + arr.length);         
		System.out.println("arr의 해시코드 : " + arr.hashCode());  //주소 완전히 새로 만들어짐
}

1) 배열에 짝수(1~10사이) 담기

int num = 0; 만들고 num+=2 를 하여 1~10 사이 짝수를 담는다.

2)

변경 전 arr :  int[ ] arr = new int[5];    

변경 후 arr :  arr = new int[10];          주소 완전히 새로 만들어짐

 

 

 

2. HARD

배열에 대해 배우고 실습문제를 풀어봤는데, 지금은 풀 수 있지만

처음 풀 때는 어려웠던 문제라서 정리해두었다.

 

1. 나와야 할 결과 (실제로 줄간 간격은 없는 것으로 한다.)

배열의 크기 입력 : 2

1번째 문자열 : welcome

2번째 문자열 : to

값을 더 입력하시겠습니까?(Y/N) : Y

추가할 개수 : 1

3번째 문자열 : JAVA

값을 더 입력하시겠습니까?(Y/N) : N

[welcome,to,JAVA]

 

2. 구현 코드

	public void method3() {
		
		
		Scanner sc = new Scanner(System.in);
		System.out.print("배열의 크기 입력 : ");
		
		String[] strArr = new String[sc.nextInt()];
		
		sc.nextLine();
		
		for(int i=0; i<strArr.length; i++) {
			System.out.print((i+1) + "번째 문자열 : ");
			strArr[i] = sc.nextLine();
		}
		
		while(true) {
			System.out.print("값을 더 입력하시겠습니까?(Y/N) : ");
			String answer = sc.nextLine();
			
			if(answer.toUpperCase().equals("Y")) {
				System.out.print("추가할 개수 : ");
				int add = sc.nextInt();
				
				String[] newArr = new String[strArr.length + add];
				System.arraycopy(strArr, 0, newArr, 0, strArr.length);
				
				sc.nextLine();
				
				for(int i=strArr.length; i<strArr.length+add; i++) {
					System.out.print((i+1) + "번째 문자열 : ");
					newArr[i] = sc.nextLine();
				}
			strArr = newArr;
			
			}else if(answer.toUpperCase().equals("N")) {
				System.out.println(Arrays.toString(strArr));
				break;
			}	
		}
	}

1) 입력받은 크기의 배열을 [ strArr ]이라는 이름으로 생성한다.

String[] strArr = new String[sc.nextInt()]

 

2) nextInt( ) --> nextLine( ) 을 사용하므로 버퍼를 빼준다.

sc.nextLine();

 

3) for문을 이용하여 몇 번째 문자열에 어떤 값을 넣는지 입력받는다.

for(int i =0; i< strArr.length; i++) {

    System.out.print((i+1) + "번째 문자열 : ");

    strArr[i] = sc.nextLine();

 

4) while문으로 "값을 더 입력하시겠습니까?" 물음을 반복시킨다.

 

5) "값을 더 입력하시겠습니까?" 에 대한 대답이 "Y" 또는 'y'인 경우

String[] newArr = new String[ strArr.length + add ];           //새로운 배열 [ newArr ]생성

System.arraycopy( strArr , 0 , newArr , 0 , strArr.length );    //strArr의 값을 newArr으로 복사

 

6) 새롭게 만들어진 newArr배열을 strArr도 참조하게 해야함

그래야만 "Y"를 입력하여 값을 더 입력한 후(newArr),

"N"을 입력하여 값을 더 입력하지 않아도

맨 처음 strArr이 출력되지 않고 newArr의 값이 출력된다.

 

strArr = newArr;

 

7) "값을 더 입력하시겠습니까?" 에 대한 대답이 "N" 또는 'n'인 경우

→ strArr의 값을 출력한다.

System.out.println( Arrays.toString( strArr ) );                  //strArr 배열 출력

 

8) while문을 종료한다

break;