본문 바로가기

Java

Java(8) - 배열, foreach 문, 메서드, 로또 생성기

728x90
반응형

<목차>

1) 배열

   1-1) 예제 풀이

2) foreach 문

   2-1) 예제 풀이

3) 메서드

   3-1) 구조 및 유형 

   3-2) 예제 풀이

4) 로또 생성기

 

 

 

 

1) 배열

1-1) 예제 풀이

패키지 chapter06.array

Array_Example02.class

package chapter06.array;

import java.util.Scanner;

public class Array_Example02 {

	public static void main(String[] args) {
		/*
		문제
		    원소 개수를 입력받아 배열을 생성하고 각 원소의 값을 입력받아 저장한 후,
		    전체 원소의 합계를 구하여 출력한다.
		조건 
		    배열 원소 개수는 2 이상의 정수로 입력받는다.
		    2 미만의 값이 입력되면 오류 메시지를 출력하고 다시 입력받는다.
		출력 결과
		    배열의 크기 : 5
		    arr[0] = 1
		    arr[1] = 2
		    arr[2] = 3
		    arr[3] = 4
		    arr[4] = 5
		    1 + 2 + 3 + 4 + 5 = 15
		*/
		
		/*
		// 내 version
		Scanner scan = new Scanner(System.in);
		
		System.out.print("배열의 크기 : ");
		int arrSize = scan.nextInt();
		
		while (arrSize < 2) {
			System.out.println("배열의 크기를 2 이상으로 다시 입력해주세요!");
			
			System.out.print("배열의 크기 : ");
			arrSize = scan.nextInt();
		}
		
		int num; // 입력값
		int resultArr[] = new int[arrSize]; // 입력값으로 구성된 배열

		int sum = 0; // 입력값들의 합

		for (int i = 0; i < arrSize; i++) {
			System.out.print("arr[" + i + "] = ");
			num = scan.nextInt();

			resultArr[i] = num;

			if (i == (arrSize - 1)) {
				for (int j = 0; j < resultArr.length; j++) {
					if (j < resultArr.length - 1) {
						System.out.print(resultArr[j] + " + ");
						sum += resultArr[j];
					} else {
						sum += resultArr[j];
						System.out.print(resultArr[j] + " = " + sum);
					}
				}
			}
		}
		*/
		
		
		// 교수님 version
		Scanner scan = new Scanner(System.in);
		int size;
		
		do {
			System.out.print("배열의 크기: ");
			size = scan.nextInt();
			
			if (size < 2) {
				System.out.println("2 이상 입력해라");
			} else {
				int[] arr = new int[size];
				int sum = 0;
				
				for (int i = 0; i < arr.length; i++) {
					System.out.print("arr[" + i + "] = ");
					arr[i] = scan.nextInt();
					sum += arr[i];
				}
				
				for (int i = 0; i < arr.length; i++) {
					System.out.print(arr[i]);
					if (i < arr.length -1) {
						System.out.print(" + ");
					} else {
						System.out.println(" = " + sum);
					}
				}
			}
		} while(size < 2);

	}

}

 

 

 

 

Array_Example03.class

package chapter06.array;

public class Array_Example03 {

	public static void main(String[] args) {
		/*
		임의의 배열 array를 역순으로 출력하시오.
		
		출력 결과 :
		          원래 배열 -> 브레드 윌크 초코 소세지 치즈
		          역순 배열 -> 치즈 소세지 초코 윌크 브레드
		*/
		
		String[] array = {"브레드", "윌크", "초코", "소세지", "치즈"};
		
		System.out.print("원래 배열 -> ");
		for (String element : array) {
			System.out.print(element + " ");
		}
		
		System.out.print("\n역순 배열 -> ");
		for (int i = (array.length - 1); i >= 0; i--) {
			System.out.print(array[i] + " ");
		}

	}

}

 

 

 

 

 

 

2) foreach 문

2-1) 예제 풀이

패키지 chapter06.array

EnhancedForLoop1.class

package chapter06.array;

public class EnhancedForLoop1 {

	public static void main(String[] args) {
		// 강화 for 문 / foreach 문
		int[] score = {88, 94, 72, 75, 23};
		int sum = 0;
		
		// i : 요소를 저장할 제어변수, score : 반복대상
		for (int i : score) {
			sum += i;
		}
		
		System.out.println("총점: " + sum);
		System.out.println("평균: " + (float) sum / score.length);
		
		// foreach 읽기 전용 반복문
		int[] score2 = {88, 94, 72, 75, 23};
		for (int s : score2) { // int s의 첫번째 사이클은 마치 int s = 88;과 같다고 보면 된다!(즉, 새로 정의된 변수에 기존 배열의 요소값을 새로 할당해준다고 보면 된다!)
			s++;
		}
		System.out.println("score[0] = " + score[0]);

	}

}

 

 

 

 

EnhancedForLoop2.class

package chapter06.array;

public class EnhancedForLoop2 {

	public static void main(String[] args) {
		int[][] score = {
				{77, 56, 70, 88},
				{55, 33, 89, 91},
				{87, 24, 11, 53}
		};
		
		for (int[] student : score) {
			for (int subject : student) {
				System.out.print(subject + ", ");
			}
			System.out.println();
		}

	}

}

 

 

 

 

 

 

3) 메서드

3-1) 구조 및 유형

/*
    1. 구조
    (접근 제어자) (반환할 값의 자료형) 메서드 명 (매개변수 자료형 매개변수 명...) {
        명령어...
        return 반환할 값;
    }
*/

// ex)
public int add (int num1, int num2) {
    int result;
    result = num1 + num2;
    return result;
}

 

 

// 메서드 유형
// 1) 파라미터X, 반환값X
public void 메서드 () {
    System.out.println("메서드 호출");
}


// 2) 파라미터X, 반환값O
public int 메서드 () {
    System.out.println("값 리턴");
    return 100;
}


// 3) 파라미터O, 반환값X
public void 메서드 (int num1, int num2) {
    System.out.println("합: " + (num1 + num2));
}


// 4) 파라미터O, 반환값O
public int 메서드 (int num1, int num2) {
    int sum = num1 + num2;
    return sum;
}

 

 

 

 

3-2) 예제 풀이

패키지 chapter07.method

MethodTest1.class

package chapter07.method;

public class MethodTest1 {

	public static void main(String[] args) {
		// method
		System.out.println("1~10 = " + calcSum(1, 10)); // calcSum 메서드 호출 부분
		System.out.println("15~100 = " + calcSum(15, 100)); // calcSum 메서드 호출 부분
	} // main
	
	// calcSum 메서드 정의하는 부분
	public static int calcSum(int from, int to) {
		int sum = 0;
		for (int i = from; i <= to; i++) {
			sum += i;
		}
		return sum;
	}

} // class

 

 

 

 

 

MethodTest2.class

package chapter07.method;

public class MethodTest2 {

	public static void main(String[] args) { // args의 default 값 : null
		// 호출부
		method1();
		String s = method2();    // String s = "hello java";와 동일한 코드이다!
		System.out.println(s);
		int[] arr = {1, 2, 3, 4, 5};
		method3(arr);
		int sum = method4(10, 100);
		System.out.println(sum);
		System.out.println(method4(10, 100));

	} // main
	
	// 메서드 정의부
	// 1. 파라미터x, 반환값x
	public static void method1() {
		System.out.println("파라미터도 없고 반환값도 없는 메서드");
		return; // 생략 가능
	}
	
	// 2. 파라미터x, 반환값o
	public static String method2() {
		System.out.println("파라미터가 없고 문자열을 반환하는 메서드");
		return "hello java";
	}
	
	// 3. 파라미터o, 반환값x
	public static void method3(int[] arrForm) {
		for (int i : arrForm) {
			System.out.print(i + " ");
		}
	}
	
	// 4. 파라미터o, 반환값o
	public static int method4(int a, int b) {
		int sum = a + b;
		return sum;
	}

} // class

 

 

 

 

 

MethodTest3.class

package chapter07.method;

public class MethodTest3 {

	public static void main(String[] args) {
		int year = 2024;
		int month = 2;
		
		int days = getMonthDays(year, month);
		System.out.println(year + "년 " + month + "월은 " + days + "일까지 있습니다.");

	} // main
	
	public static int getMonthDays(int year, int month) {
		int[] arDays = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
		
		if (month == 2) {
			if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
				return 29;
			}
			return 28;
		} else {
			return arDays[month];
		}
	}

}

 

 

 

 

 

MethodTest4.class

package chapter07.method;

public class MethodTest4 {

	public static void main(String[] args) {
		// value check
		int num = 2;
		getDouble(num);
		System.out.println("num= " + num);
		
		int[] arr = {2, 8, 6};
		getDouble(arr);
		for (int i = 0; i < arr.length; i++) {
			System.out.println("arr[" + i + "]= " + arr[i]);
		}

	}
	
	public static int getDouble(int value) {
		value *= 2;
		return value;
	}
	
	public static void getDouble(int[] value) {
		value[0] *= 2;
	}

}

 

 

 

 

 

 

4) 로또 생성기

* Math 클래스의 random 메서드 : 값을 출력할 시 매번 해당 범위 내의 숫자 중 random으로 값을 뽑아줌!!

패키지 chapter06.array

Random_Example.class

package chapter06.array;

import java.util.Random;

public class Random_Example {

	public static void main(String[] args) {
		// 난수를 발생하는 두가지 방법
		
		// Math 클래스의 random 메서드를 호출
		double num = Math.random(); // random 메서드는 "0.0xxxx ~ 0.9xxxx"를 결과로 반환함
		int num2 = (int) (Math.random()*10 + 1);
		System.out.println(num);
		System.out.println(num2);
		
		// Random 클래스의 객체를 생성하여 난수 발생
		Random r = new Random();
		int num3 = r.nextInt(100);
		System.out.println(num3);

	}

}

 

(1) 첫 번째 시도 출력 결과

 

(2) 두 번째 시도 출력 결과

 

 

 

 

Array_Example04.class

package chapter06.array;

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

public class Array_Example04 {

	public static void main(String[] args) {
		/*
		로또 생성기
		로또는 1 ~ 45의 숫자가 총 6개가 1게임이다.
		중복된 숫자 발생 시 중복을 제거하고,
		작은 숫자부터 큰 숫자 순으로 정렬한다.
		
		로또 게임을 몇 개 구매할 것인지 입력을 받아
		해당 개수만큼의 6개의 번호가 있는 로또를 출력한다.
		*/
		
		/*
		// 내 version 
		Scanner scan = new Scanner(System.in);
		System.out.print("구매하실 로또의 개수를 입력하세요 : ");
		int purchaseNum = scan.nextInt();
		System.out.println("==================================");
		
		Random r = new Random();
		int num;
		int[] arr = new int[6];
		int temp;
		
		for (int i = 1; i <= purchaseNum; i++) {
			System.out.print("*[ " + i + "]번째: ");
			
			for (int j = 0; j < 6; j++) {
				num = r.nextInt(100) + 1;
				
				while (num > 45) {
					num = r.nextInt(100) + 1;
				}
				
				arr[j] = num;
				
				
				// 로또 번호 중복 체크 코드에 대한 이상여부 체크용
				//for (int s = 0; s < arr.length; s++) {
				//	arr[s] = 1;	
				//}
				
				
				if (arr.length == 6) {
					for (int k = 0; k < arr.length; k++) {
						for (int h = 0; h < arr.length; h++) {
							if (k == h) {
								continue;
							} else {
								while (arr[k] == arr[h]) {
									num = r.nextInt(100) + 1;
								
								    while (num > 45) {
									    num = r.nextInt(100) + 1;
								    }
								    
								    arr[h] = num;
							    }
						    }
					    }
					}
				}

			}
			
			
			for (int p = 0; p < arr.length; p++) {
				for (int w = p+1; w < arr.length; w++) {
					if (arr[p] > arr[w]) {
						temp = arr[w];
						arr[w] = arr[p];
						arr[p] = temp;
					}
				}
				
			}
			
			for (int q = 0; q < arr.length; q++) {
				System.out.print(arr[q] + " ");
			}
			
			System.out.println();
		}
		*/
		
		
		// 교수님 version
		Scanner scan = new Scanner(System.in);						//입력받기 위한 Scanner 객체 생성
		System.out.print("구매하실 로또의 개수를 입력하세요: ");
		int num = scan.nextInt();									//입력받은 숫자를 저장
		int cnt = 1;												//코드 실행의 카운트값
		System.out.println("================================");
		
		while(cnt <= num) {											//1부터 받고 싶은 행운번호의 개수만큼을 반복
			int lotto[] = new int[6];								//로또므로 번호 6개짜리 배열 생성
			
			//난수 6개 배열에 저장
			for (int i = 0; i < lotto.length; i++) {
				lotto[i] = (int)(Math.random()*45 + 1);				//Math.random()을 통해 1~45 사이의 난수 생성
				
				//중복제거
				for (int j = 0; j < i; j++) {
					if(lotto[i] == lotto[j]) {
						i--;					//이전과 중복된 값이 있다면 해당 배열의 방에 다시 새로운 숫자를 생성하도록 반복횟수--
						break;
					}
				}
			}
			
			//정렬
			for (int i = 0; i < lotto.length; i++) {
				for (int j = i+1; j < lotto.length; j++) {
					if(lotto[i] > lotto[j]) {	//옆 방에 값과 비교해서 큰수를 오른쪽으로 이동
						int temp = lotto[j];
						lotto[j] = lotto[i];
						lotto[i] = temp;
					}
				}
			}
			
//			Arrays.sort(lotto);
			
			//배열의 각 요소를 출력
//			System.out.print(" *["+cnt+"]번째: ");
			System.out.printf(" *[%3d]번째: ", cnt);
			for (int k : lotto) {
//				System.out.print(k + " ");
				System.out.printf("%2d ", k);			
			}
			System.out.println();
			cnt++;			//카운트값을 증가
		}

	}

}