코딩/Java

kh6일차(배열)

danmuji 2022. 6. 27. 18:14

배열 = 참조형

int [] arr; =>참조형

int arr []; =>참조형

int[] arr = new int [5]; // 정수 5개를 저장할 수 있는 배열 선언

선언을 하면 그 선언된 자리에 기본값 0으로 세팅이됨

int[]arr = {1,2,3,4,5}; 라고 하면 각 인덱스에 1,2,3,4,5가 저장

String[] arr = {"hi","hello","bye"}

arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
arr[4] = 5;

 

배열의 경우 반복문으로 출력가능

System.out.println("반복문을 이용한 배열 출력");
for(int i=0;i<5;i++) {
System.out.println(arr[i]);

 

package kh.java.func;

import java.util.Scanner;
import java.util.Random;

public class ArrayTest {
	// 6.27
	public void test1() {
		// 정수형 변수 5개를 선언한 후 1/2/3/4/5 를 저장
		int num0 = 1;
		int num1 = 2;
		int num2 = 3;
		int num3 = 4;
		int num4 = 5;
		System.out.println("변수를 이용한 값 출력 ");
		System.out.println(num0);
		System.out.println(num1);
		System.out.println(num2);
		System.out.println(num3);
		System.out.println(num4);
		// 정수형 배열 이용해서 5개 값 저장후 출력
		// 정수 5개를 저장할 수 있는 배열 선언
		int[] arr = new int[5];
		arr[0] = 1;
		arr[1] = 2;
		arr[2] = 3;
		arr[3] = 4;
		arr[4] = 5;
		System.out.println("배열을 이용한 값 출력");
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
		System.out.println(arr[3]);
		System.out.println(arr[4]);
		// 배열의 경우 반복문으로 출력가능
		System.out.println("반복문을 이용한 배열 출력");
		for (int i = 0; i < 5; i++) {
			System.out.println(arr[i]);
		}
	}

	public void test2() {
		// 배열에 데이터 1,2,3,4,5 넣기
		// 1) 길이가 5인 배열 선어 후 인덱스 번호로 데이터 넣기
		int[] arr1 = new int[5];
		// 선언 후 기본값으로 배열 초기화
		for (int i = 0; i < 5; i++) {
			System.out.println(arr1[i]);
		}
		arr1[0] = 1;
		arr1[1] = 2;
		arr1[2] = 3;
		arr1[3] = 4;
		arr1[4] = 5;
		for (int i = 0; i < 5; i++) {
			System.out.println(arr1[i]);
		}
		// 2) 배열 선언 시 동시에 값 대입
		int[] arr2 = { 1, 2, 3, 4, 5 };
		for (int i = 0; i < 5; i++) {
			System.out.println(arr2[i]);
		}
	}

	public void test3() {
		// 배열에 hi,Hello,bye 를 대입
		// 1) 길이가 3인 배열을 선언하여 인덱스이용해서 대입
		// 2) 배열 선언하면서 동시에 값 대입{}이용
		String[] arr3 = { "hi", "Hello", "bye" };
		for (int i = 0; i < 3; i++) {
			System.out.println(arr3[i]);
		}
	}

	public void test4() {
		// 길이가 4인 정수형 배열 선언
		// 스캐너를 이용해서 국어점수,수학점수,영어점수를 입력받아 저장
		// 입력받아서 배열에 저장
		// 배열 마지막공간에는 합계를 저장
		// 출력 국어점수/수학점수/영어점수/합계/평균
		// 출력 예
		// 국어 : 80 / 수학 : 50 / 영어 : 30 / 합계 : 160/ 평균 53.33
		Scanner sc = new Scanner(System.in);
		int arr1[] = new int[4];
		int total = 0;
		double avr = 0;

		for (int i = 0; i < 3; i++) {
			arr1[i] = sc.nextInt();

			total += arr1[i];
			avr = (double) total / 3;
		}
		System.out.print("국어 : " + arr1[0]);
		System.out.print(" 수학 : " + arr1[1]);
		System.out.print(" 영어 : " + arr1[2]);
		System.out.print(" 합계 :" + total);
		System.out.printf(" 평균: %.2f", avr);
	}

	public void test4_1() {
		Scanner sc = new Scanner(System.in);
		int[] arr = new int[4];
		System.out.print("국어 점수 입력 : ");
		arr[0] = sc.nextInt();
		System.out.print("수학 점수 입력 : ");
		arr[1] = sc.nextInt();
		System.out.print("영어 점수 입력 : ");
		arr[2] = sc.nextInt();
		arr[3] = arr[0] + arr[1] + arr[2];
		double avg = (double) arr[3] / 3;
		System.out.printf("국어 : %d / 수학 : %d / 영어 : %d / 합계 : %d / 평균 : %.2f ", arr[0], arr[1], arr[2], arr[3], avg);
	}

	public void test5() {
		// 길이 100인 정수형 배열 선언
		// 1~100까지 값 순서대로 대입 후 출력
		int[] arr = new int[100];

		for (int i = 0; i < 100; i++) {
			arr[i] = i + 1;
			System.out.println(arr[i]);

		}
//		arr[0] = 1;
//		System.out.println(arr[1]);
//		arr[2] = 3;
//		System.out.println(arr[3]);
	}

	public void test6() {
		Scanner sc = new Scanner(System.in);
		// 길이가 5인 정수형 배열을 선언
		// 스캐너 + for문을 이용하여 정수 5개 입력받은후
		// 입력받은 정수 출력
		int[] arr = new int[5];

		for (int i = 0; i < arr.length; i++) {
			System.out.print((i + 1) + "정수 를 입력하세요 :");
			arr[i] = sc.nextInt();

		}
//		if (arr[0] > arr[1]) {
//			int tmp = arr[0];
//			arr[0] = arr[1];
//			arr[1] = tmp;
//		}
//		if (arr[1] > arr[2]) {
//			int tmp = arr[1];
//			arr[1] = arr[2];
//			arr[2] = tmp;
//		}
//		if (arr[2] > arr[3]) {
//			int tmp = arr[2];
//			arr[2] = arr[3];
//			arr[3] = tmp;
//		}
//		if (arr[3] > arr[4]) {
//			int tmp = arr[3];
//			arr[3] = arr[4];
//			arr[4] = tmp;
//		}

		for (int j = 0; j < arr.length - 1; j++) {
			for (int i = 0; i < arr.length - 1 - j; i++) {
				if (arr[i] > arr[i + 1]) {
					int tmp = arr[i];
					arr[i] = arr[i + 1];
					arr[i + 1] = tmp;
				}
			}
		}
//		for (int i = 0; i < 3; i++) {
//			if (arr[i] > arr[i + 1]) {
//				int tmp = arr[i];
//				arr[i] = arr[i + 1];
//				arr[i + 1] = tmp;
//			}
//		}
//		for (int i = 0; i < 2; i++) {
//			if (arr[i] > arr[i + 1]) {
//				int tmp = arr[i];
//				arr[i] = arr[i + 1];
//				arr[i + 1] = tmp;
//			}
//		}
//		for (int i = 0; i < 1; i++) {
//			if (arr[i] > arr[i + 1]) {
//				int tmp = arr[i];
//				arr[i] = arr[i + 1];
//				arr[i + 1] = tmp;
//			}
//		}
		// 배열 0번째 값과 배열 1번째 값을 비교해서
		// 0번째가 큰 경우 두 수의 자리를 변경
		for (int i = 0; i < 5; i++) {
			System.out.print(arr[i] + "\t");
		}

	}

	public void lotto() {
		Scanner sc = new Scanner(System.in);
		Random r = new Random();
		System.out.println("===== 로또 프로그램 =====");

		int userNum[] = new int[6]; // 사용자 번호
		int pcNum[] = new int[6]; // pc 번호
		int dup = 0;
		for (int i = 0; i < userNum.length; i++) {
			System.out.print((i + 1) + "번째 번호 입력 : ");
			userNum[i] = sc.nextInt();
			// 사용자 입력 숫자는 1~45사이값인지
			// 이전에 입력을 했던 번호인지
			// 1)1~45인지
			if (userNum[i] < 1 || userNum[i] > 45) {
				System.out.println("잘못 입력하셨습니다. 1~45사이의 숫자를 입력해주세요");
				i--;// 해당 index값을 다시 입력 받아야 하므로 continue전에 미리 -1을 해둔다
				continue;// 증감문으로 올라감
			}
			// 2)중복체크
			for (int j = 0; j < i; j++) {// 지금 입력받은 인덱스 번호 이전까지만 검사
				if (userNum[i] == userNum[j]) {
					System.out.println("이미 중복된 번호입니다.");
					i--;// 중복인경우 해당값을 다시 입력받아야하니까 -1
					break;
				}
			}

		}
		for (int i = 0; i < pcNum.length; i++) {
			pcNum[i] = r.nextInt(45) + 1;
			// 2)중복체크
			for (int j = 0; j < i; j++) {// 지금 입력받은 인덱스 번호 이전까지만 검사
				if (pcNum[i] == pcNum[j]) {
					i--;// 중복인경우 해당값을 다시 입력받아야하니까 -1
					break;
				}
			}
		}

		for (int i = 0; i < userNum.length - 1; i++) {
			for (int j = 0; j < userNum.length - 1 - i; j++) {
				if (userNum[j] > userNum[j + 1]) {
					int tmp = userNum[j];
					userNum[j] = userNum[j + 1];
					userNum[j + 1] = tmp;
				}
				if (pcNum[j] > pcNum[j + 1]) {
					int tmp = pcNum[j];
					pcNum[j] = pcNum[j + 1];
					pcNum[j + 1] = tmp;
				}

			}
		}
		System.out.println("사용자 번호");
		for (int i = 0; i < userNum.length; i++) {
			System.out.print(userNum[i] + "\t");
		}
		System.out.println();
		System.out.println("컴퓨터 번호");
		for (int i = 0; i < pcNum.length; i++) {
			System.out.print(pcNum[i] + "\t");
		}
		for (int i = 0; i < userNum.length; i++) {
			// 2)중복체크
			for (int j = 0; j <= i; j++) {// 지금 입력받은 인덱스 번호 이전까지만 검사
				if (userNum[i] == pcNum[j]) {
					dup++;
					break;
				}
			}
		}
		System.out.println();
		System.out.println(dup + "개 맞았습니다.");
		if (dup == 6) {
			System.out.println("1등");
		} else if (dup == 5) {
			System.out.println("2등");
		} else if (dup == 4) {
			System.out.println("3등");
		} else if (dup == 3) {
			System.out.println("4등");
		} else {
			System.out.println("꽝");
		}
	}

	public void lotto_1() {
		Scanner sc = new Scanner(System.in);
		Random r = new Random();
		System.out.println("===== 로또 프로그램 =====");

		int userNum[] = new int[6]; // 사용자 번호
		int pcNum[] = new int[6]; // pc 번호
		for (int i = 0; i < userNum.length; i++) {
			System.out.println((i + 1) + "번째 번호 입력 : ");
			userNum[i] = sc.nextInt();
			// 사용자 입력 숫자는 1~45사이값인지
			// 이전에 입력을 했던 번호인지
			// 1)1~45인지
			if (userNum[i] < 1 || userNum[i] > 45) {
				System.out.println("잘못 입력하셨습니다. 1~45사이의 숫자를 입력해주세요");
				i--;// 해당 index값을 다시 입력 받아야 하므로 continue전에 미리 -1을 해둔다
				continue;// 증감문으로 올라감
			}
			// 2)중복체크
			for (int j = 0; j < i; j++) {// 지금 입력받은 인덱스 번호 이전까지만 검사
				if (userNum[i] == userNum[j]) {
					System.out.println("이미 중복된 번호입니다.");
					i--;// 중복인경우 해당값을 다시 입력받아야하니까 -1
					break;
				}
			}
		}
		int[] comNum = new int[6];
		for (int i = 0; i < comNum.length; i++) {
			comNum[i] = r.nextInt(45) + 1;
			// 컴퓨터 번호 중복체크
			for (int j = 0; j < i; j++) {
				if (comNum[i] == comNum[j]) {
					i--;
					break;
				}
			}

		}
		// 사용자 번호 정렬
		for (int i = 0; i < userNum.length; i++) {
			for (int j = 0; j < userNum.length - 1 - i; j++) {
				if (userNum[j] > userNum[j + 1]) {
					int tmp = userNum[j];
					userNum[j] = userNum[j + 1];
					userNum[j + 1] = tmp;
				}
			}
		}
		// 컴퓨터 번호 정렬
		for (int i = 0; i < comNum.length; i++) {
			for (int j = 0; j < comNum.length - 1 - i; j++) {
				if (comNum[j] > comNum[j + 1]) {
					int tmp = comNum[j];
					comNum[j] = comNum[j + 1];
					comNum[j + 1] = tmp;
				}
			}
		}
		int cnt = 0;// 일치하는 번호 카운팅용 변수
		// 유저번호,컴퓨터번호 일치하는 갯수 카운팅
		for (int i = 0; i < userNum.length; i++) {
			for (int j = 0; j < comNum.length; j++) {
				if (userNum[i] == comNum[j]) {
					cnt++;
					break;
				}
			}
		}
		System.out.println("최종 결과");
		System.out.println("사용자 번호 : ");
		for (int i = 0; i < userNum.length; i++) {
			System.out.println(userNum[i] + "  ");
		}
		System.out.println();
		System.out.println("당첨번호 : ");
		for (int i = 0; i < comNum.length; i++) {
			System.out.println(comNum[i] + "  ");
		}
		System.out.println();
		System.out.println("맞은 갯수 : "+cnt);
		switch(cnt) {
		case 6:
			System.out.println("1등!");
			break;
		case 5:
			System.out.println("2등!");
			break;
		case 4:
			System.out.println("3등!");
			break;
		case 3:
			System.out.println("4등!");
			break;
		default :
			System.out.println("꽝!!!");
			break;
		}
	}
}