최대공약수,최소공배수,소수를 구하는 메서드 만들어보기.
최대 공약수
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;
}
}