본문 바로가기

자바 수업 정리

수업정리 6일차.

최대공약수,최소공배수,소수를 구하는 메서드 만들어보기.

최대 공약수

	public static int gcd(int num1, int num2) {
		int max = 0;
		for(int i = 1; i <= num1; i ++) {
			if(num1 % i == 0 && num2 % i == 0) {
				max = i;
			}
		}
		return max;
	}

 

최소 공배수 

	public static int lcm(int num1, int num2) {
		for(int i=num1; ; i+=num1) {
			if(i%num1 == 0 && i%num2 == 0) {
				return i;
			}
		}
	}
	/* 최소공배수 규칙 : 두 수를 곱한 후 최대공약수로 나누면 최소공배수
	 * 메서드 안에서 다른 메서드 호출 가능.
	 */
	
	public static int lcm2(int num1, int num2) {
		return (num1*num2) / gcd(num1, num2);
	}

 

소수

소수면 true / 아니면 false

	public static boolean isPrime(int num1) {
		int count =0;
		boolean result;
		for(int i =1; i <= num1; i++) {
			if(num1 % i == 0) {
				count++;
			}
		}		
		
		if(count ==2) {
			result = true;
		} else {
			result = false;
		}
	
		return result;		
	}

 

메서드를 활용해서 로또번호 만들기 

public class Method06 {
	// 로또 번호 생성 (1~45)
	/* 사용자 번호 6자리
	 * 당첨번호 7자리 => 마지막 자리는 보너스번호
	 * -- 당첨기준
	 * 1등 당첨번호 6자리가 모두 일치
	 * 2등 당첨번호 5자리 일치 + 보너스번호 일치
	 * 3등 당첨번호 5자리 일치
	 * 4등 당첨번호 4자리 일치
	 * 5등 당첨번호 3자리 일치
	 * 나머지 꽝~!!
	 * */
	
	/* 배열을 매개변수로 받아 1~45까지 랜덤수를 채우는 메서드 (중복불가능 => 중복확인 메서드활용) 
	 * 매개변수 : 배열 (lotto, user)
	 * 리턴타입 : void 없음.
	 * randomArray
	 * */
	public static void randomArray(int arr[]) {
		//매개변수로 들어온 배열에 랜덤값을 중복없이 채우기.
		int cnt=0; //while에서 i 역할을 할 변수
		while(cnt<arr.length) {
			int r = (int)(Math.random()*10)+1;
			//랜덤 수 생성 후 중복확인  
			//isContain == true 중복되었다는 뜻
			if(!isContain(arr, r)) { 
				arr[cnt]=r;
				cnt++;
			}
		}
	}
	
	/* 배열을 받아 배열을 출력하는 메서드
	 * user 1 2 3 4 5 6
	 * lotto 1 2 3 4 5 6 [7]
	 * */
	public static void printArray(int arr[]) {
		for(int i=0; i<6; i++) {
			System.out.print(arr[i]+" ");
		}

		if(arr.length>6) {
			int b = arr[arr.length-1];
			System.out.println("["+b+"]");
		}
		
	}
	
	/* 중복확인 메서드
	 * 같은값이 있으면 true, 없으면 false 
	 * 넣을 배열에 랜덤값이 존재하는지 확인
	 * 매개변수 : 배열, 랜덤값
	 * 리턴타입 : boolean
	 * */
	public static boolean isContain(int arr[], int random) {
		for(int i=0; i<arr.length; i++) {
			if(arr[i] == random) {
				return true;
			}
		}
		return false;
	}
	
	/* 등수 확인 메서드 (중복확인 메서드를 활용)
	 * 매개변수 : lotto[], user[]
	 * 리턴타입 : 등수 리턴  꽝/오류 -1 
	 * */
	public static int lottoRank(int lotto[], int user[]) {
		//lotto = 7개 / user = 6개
		// 배열이 잘못들어오면 오류
		if(lotto.length <= user.length){
			return -1;
		}
		
		int cnt = 0; //일치하는 개수를 세기위한 변수(보너스 제외)
		for(int i=0; i<6; i++) {
			if(isContain(user, lotto[i])) {
				cnt++;
			}
		}

		switch(cnt) {
		case 6: return 1;
		case 5: 
			if(isContain(user, lotto[lotto.length-1])) {
				return 2;
			}else {
				return 3;
			}
		case 4: return 4;
		case 3: return 5;
		default: return -1;
		}
	}

	public static void main(String[] args) {
		int lotto[] = new int[7];
		int user[] = new int[6];
		
		randomArray(lotto);
		randomArray(user);
		
		printArray(lotto);
		
		System.out.println("-----------");
		printArray(user);
		System.out.println();
		int rank = lottoRank(lotto, user);
		if(rank == -1) {
			System.out.println("꽝!!!");
		}else {
			System.out.println(rank+"등 입니다.");			
		}
	}

}

 

야구게임 메서드 이용해서 클래스화

 

import java.util.Scanner;

public class Exam01 {

	public static void main(String[] args) {
		// 야구게임의 클래스화
		int comNum[] = new int[3];
		int myNum[] = new int[3];
		
		randomNum(comNum);   // 컴퓨터 수 생성
		
		
		// 사용자 번호 입력받기.
		Scanner scan = new Scanner(System.in);
		
		while(true) {
			System.out.println(" 세 개의 숫자 입력 >> (1 ~ 9)"); 
			String myStr =  scan.next();
			String[] num = myStr.split(""); 
			
			for(int i=0; i<myNum.length; i++) {
				myNum[i] = Integer.parseInt(num[i]);
			}
			
			// 결과 출력
			int strike = st(comNum, myNum); // 스트라이크 수 세기
			int ball = ball(comNum, myNum); // 볼 수 세기
			
			if(strike == 3) {
				System.out.println( "3 스트라이크 정답~!!");
				break;
			} else if(strike == 0 && ball == 0) {
				System.out.println(" out !!");
			} else {
				System.out.println("스트라이크: "+strike+" 볼: "+ball);
			}
		
		}
			
		scan.close();	
	}
	
	
	/* 랜덤으로 배열을 중복되지 않게 생성
	 */
	
	public static void randomNum(int arr[]) {    // comNum 배열채우기
		int cnt =0; 
		while(cnt<arr.length) {
			int r = (int)(Math.random()*9)+1;			
			if(!isContain(arr,r)) {  // 중복되지않게
				arr[cnt] =r;
				cnt++;
			}
		}
	}
	
	/* 중복되면 true / false 알려주는 메서드
	 */
	
	public static boolean isContain(int arr[], int random) { // 중복확인
		for(int i=0; i < arr.length; i++) {
			if(arr[i] == random) {
				return true;
			}
		}
		return false;
	}
	
	/* 스트라이크 개수를 카운트하여 리턴하는 메서드
	 * comNum, myNum주고 번호와 위치가 같이 일치하면 count 하는 메서드 
	 * 매개변수 : comNum[], myNum[]
	 * 리턴타입 : 카운트 값 int
	 */
	public static int st(int comNum[], int myNum[]) {
		int count = 0;
		for(int i =0; i < comNum.length; i++) {
			if(isContain(comNum, myNum[i]) && comNum[i] == myNum[i]) {
				count++;
			}
		}
		return count;
	}
	
	
	/* 볼 개수를 카운트하여 리턴하는 메서드
	 * comNum, myNum주고 번호만 일치하면 count 하는 메서드 
	 * 매개변수 : comNum[], myNum[]
	 * 리턴타입 : 카운트 값 int
	 */
	public static int ball(int comNum[], int myNum[]) {
		int ball = 0;
		for(int i =0; i < comNum.length; i++) {
			if(isContain(comNum, myNum[i]) && comNum[i] != myNum[i]) {
				ball++;
			}
		}
		return ball;
	}

}

'자바 수업 정리' 카테고리의 다른 글

수업정리 8일차.  (3) 2024.07.24
수업정리 7일차.  (2) 2024.07.23
수업정리 5일차.  (0) 2024.07.19
수업정리 4일차.  (0) 2024.07.18
수업정리 3일차.  (1) 2024.07.17