배열 응용 실습

박성현·2024년 3월 19일

java

목록 보기
21/51

배열 응용실습 해보자 ! !

여러개의 점수를 받아 총점과 평균을 출력해보자.

package arrayex;

public class ArrayTest01 {

	public static void main(String[] args) {

		int sum = 0;            
		float average = 0f;     

		int score[] = {100, 88, 100, 100, 90};

		for(int i=0; i<score.length; i++) {
			sum += score[i];
		}
//		향상된 for문 출력 방법
//		for(int n:score) {
//			sum+=n;
//		}
		average = sum / score.length;

		System.out.println("총점 : " + sum);
		System.out.println("평균 : " + average);
	}
}	

결과값 :


10개의 값을 받아서 10개의 값을 랜덤으로 출력하기

package arrayex;

public class Arraytest3 {

	public static void main(String[] args) {
		int numArr[] = new int[10];
		
		// 값을 입력받아 numArr에 값을 넣어줌
		for(int i=0; i<numArr.length; i++) {
			numArr[i] = i;
			System.out.print(numArr[i]);
			
		}
		System.out.println();
		
		for (int i=0; i<100; i++) {
			// 0이상 1미만의 double형식의 난수를 생성해줌 / *10으로 0이상 10미만의 값으로 바꿔줄 수 있음
			int n = (int)(Math.random()*10);
			
			//배열의 첫번째요소와 임의의 요소를 선택하여 값을 교환하여 배열의 요소를 섞게 됨
			int tmp = numArr[0];
			numArr[0] = numArr[n];
			numArr[n] = tmp;
		}
		// 바꿔준 값들 출력
		for (int i=0; i<numArr.length; i++) {
			System.out.println(numArr[i]);
		}
		
	}

}

결과값 :


다음 1~45까지의 데이터를 배열에 담은 후 값을 섞(shuffle)은 후 0~5인덱스의 값을 출력하시오.

package arrayex;

public class Arraytest4 {
	
	static void arraySort(int[] arr) {
		//우측 끝부터 오름차순으로 정렬되기 때문에 -1을하여 불필요한 부분 제거
		//받은 배열의 길이만큼 반복하게 해줌
		for (int i=0; i<arr.length-1; i++) {
			// 최초에는 false로 선언해줌
			boolean change=false;
			// 마찬가지로 -1하여 우측 끝은 비교X
			for(int j=0; j<arr.length-1; j++) {
				if(arr[j] > arr[j+1]) {
				// 앞쪽의 arr의 값이 더커서 if문을 타고들어왔기 때문에
				// true로 선언해주므로써 아래 if문에서 break를 걸지 않게 됨
				change=true;
				// 정렬해주는 단계
				int tmp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = tmp;
			}
		}
		// 만약 여기에서 바로위의 if문을 타지않고 바로 왔다면 최초의 값인 false이기 때문에 !을 받아 
		// true가 되어 break에 걸리게됨
		if(!change) break;
	}
}

	public static void main(String[] args) {
		// 값을 받을 수 있는 45개의 배열 선언
		int numArr[] = new int[45];
		
		// 값을 입력받아 numArr에 값을 넣어줌
		for(int i=0; i<numArr.length; i++) {
			numArr[i] = i+1;			
		}

		for (int i=0; i<4007; i++) {
			// 0이상 1미만의 double형식의 난수를 생성해줌 / *45으로 0이상 45미만의 값으로 바꿔줄 수 있음
			int n = (int)(Math.random()*45);
			
			//배열의 첫번째요소와 임의의 요소를 선택하여 값을 교환하여 배열의 요소를 섞게 됨
			int tmp = numArr[0];
			numArr[0] = numArr[n];
			numArr[n] = tmp;
		}
		
		// 로또번호로 받을 배열을 선언해줌
		int[] lottoOne = new int[6];
		for (int i = 0; i < lottoOne.length; i++) { 
			// 인덱스 범위를 lottoOne 배열의 크기로 수정
			// numArr의 값을 lottoOne의 값으로 복사해줌
		    lottoOne[i] = numArr[i];
		}
		// arraySort 함수 실행 
		arraySort(lottoOne);
		
		int cnt=0;
		for (int i =0; i<lottoOne.length; i++) {
			cnt++;
			System.out.printf("로또 %s번째 숫자 = " + lottoOne[i] ,cnt);
			System.out.println();
		}
	}

}

결과값 :


버블정렬: 다음 0~9까지의 랜덤한 데이터 10개를 배열에 담은 작은값부터 큰값으로 정렬 후 값을 출력하시오.

package arrayex;

import java.util.Arrays;

public class Arraytest5 {

	public static void main(String[] args) {
		int[] numArr = new int[10];

		for (int i=0; i < numArr.length ; i++ ) {
			System.out.print(numArr[i] = (int)(Math.random() * 100));
		}
		System.out.println();

		for (int i=0; i < numArr.length-1 ; i++ ) {
			boolean changed = false;    // 자리바꿈이 발생했는지를 체크한다.

			for (int j=0; j < numArr.length-1 ;j++) {
				if(numArr[j] > numArr[j+1]) { // 옆의 값이 작으면 서로 바꾼다.
					int temp = numArr[j];
					numArr[j] = numArr[j+1];
					numArr[j+1] = temp;
					changed = true; // 자리바꿈이 발생했으니 changed를 true로.
				}
			} 

			if (!changed) break;    // 자리바꿈이 없으면 반복문을 벗어난다.주석 후 확인
			for(int k=0; k<numArr.length;k++)
				System.out.println(Arrays.toString(numArr));
			System.out.println();
		} 
	}
}

결과값 :


사용자에게 배열에 있는 영어단어를 보여주고 사용자에게 뜻을 입력받아 정답 유무를 출력하시오.

  • 먼저 향상된 for문으로 실습해보겠다.
package arrayex;

import java.util.Scanner;

public class ArrayWordEx {
	 public static void main(String[] args) {
	        String[][] words = {
	            {"apple","사과"},         // words[0][0], words[0][1]
	            {"banana","바나나"}, // words[1][0], words[1][1]
	            {"peach","복숭아"}        // words[2][0], words[2][1]
	        };
	        
//	        배열이 나와야하므로 String[]
	        Scanner sc = new Scanner(System.in);
	        for(String[] word:words) {
	        	String en = word[0];
	        	String kr = word[1];
	        	System.out.printf("Q. %s의 뜻은? \n",en);
	        	
	        	String ans = sc.next();
	        	if(ans.equals(kr)) {
	        		System.out.println("정답");
	        	}else {
	        		System.out.println("오답입니다. 정답은 " +kr);
	        	}
	        }
	        


	    } // main의 끝
	}

결과값 :

추가로 일반 for문을 사용하여 실습해보자.

package arrayex;

import java.util.Scanner;

public class ArrayWordEx {
	 public static void main(String[] args) {
	        String[][] words = {
	            {"apple","사과"},         // words[0][0], words[0][1]
	            {"banana","바나나"}, 		// words[1][0], words[1][1]
	            {"peach","복숭아"}        // words[2][0], words[2][1]
	        };
	        
//	        배열이 나와야하므로 String[]
	        Scanner sc = new Scanner(System.in);

	        for(int i=0;i<words.length;i++) {
	            System.out.printf("Q%d. %s의 뜻은?", i+1, words[i][0]);

	            String tmp = sc.nextLine();

	            if(tmp.equals(words[i][1])) {
	                System.out.printf("정답입니다.%n%n");
	            } else {
	               System.out.printf("틀렸습니다. 정답은 %s입니다.%n%n",words[i][1]);
	            }
	        } // for
	    } // main의 끝
	}

결과값 :


profile
개발기록장

0개의 댓글