day 07(예제)

2023. 12. 18. 17:19자바 기초 및 세팅

메소드 예제1

package day07;

public class MethodEx1 {

	public static void main(String[] args) {
		int num1 = 1, num2 = 2;
		int result = sum(num1, num2);
		System.out.println(num1+" + "+num2+" = "+result);
		System.out.println(sum(num1, num2));
	}
	
	
	/* 두 정수의 합을 알려주는 메서드
	 * 메개 변수 : 두 정수 => int num1, int num2
	 * 리턴 타입 : 정수의 합 =? 정수 => int
	 * 메서드 명 : sum
	 * */
	public static int sum(int num1, int num2) {
		//구현;
		int result = num1 + num2;
		return result;
	}
}

 

메소드 예제2

package day07;

public class MethodEx2 {

	public static void main(String[] args) {
		/*매개 변수가 기본형 변수인 경우와 참조형 변수인 경우의 차이를 보여주는 예제
		 * 매개변수가 기본자료형이면 메서드 안에서 값이 바뀌어도 원본은 안바뀜
		 * */
		int num1 = 10, num2 = 20;
		swap1(num1, num2);
		System.out.println("num1 = " + num1 + ", num2 " + num2);
		
		int [] arr1 = {1, 2, 3, 4,5};
		int [] arr2 = {10, 20, 30, 40, 50};
		System.out.print("arr1 = ");
		printArray(arr1);
		System.out.print(", arr2 = ");
		printArray(arr2);
		System.out.println();
		
		swap2(arr1, arr2);
		System.out.print("arr1 = ");
		printArray(arr1);
		System.out.print(", arr2 = ");
		printArray(arr2);

	}
	
	/*
	 * 기능 : 정수 배열을 콘솔에 한줄로 출력하는 메서드 
	 * 매개변수 : 출력하려는 정수 배열 => int []arr
	 * 리턴타입 : 없음
	 * 메서드명 : printArray
	 * */
	public static void printArray(int []arr) {
		for(int tmp : arr) {
			System.out.print(tmp + " ");
		}
	}
	
	/* 기능 : 두 정수를 바꾸는 메소드
	 * 매개변수 : 바꿀 두 정수 => int num1, int num2
	 * 리턴타입 : 없음 => void
	 * 메서드명 : swap1 
	 * */
	public static void swap1(int num1, int num2) {
		int tmp = num1;
		num1 = num2;
		num2 = tmp;
	}
	
	/* 기능 : 두 정수 배열을 바꾸는 메서드
	 * 매개변수 : 바꿀 두 정수 배열 => int [] arr1, int [] arr2
	 * 리턴타입 : 없음 => void
	 * 메서드명 : swap2
	 * */
	public static void swap2(int [] arr1, int [] arr2) {
		for(int i = 0; i < arr1.length; i++) {
			int tmp = arr1[i];
			arr1[i] = arr2[i];
			arr2[i] = tmp;
		}
		
	}
	
	
}

 

배열 메소드1

package day07;

import java.util.Scanner;

public class ArrayMathodEx1 {

	public static void main(String[] args) {
		/* 1~45사이의 중복 되지 않은 랜덤한 수 6개를 만드는 코드를 작성하세요.(메서드 이용)
		 * */ 
		
		int arr[] = new int[6];
		int min = 1, max = 45
				;
		if(createRandomArray(min, max, arr)) {
			System.out.println("배열 생성 성공!");
			for(int tem : arr) {
				System.out.print(tem + " ");
			}
		}else {
			System.out.println("배열 생성 실패!");
		}
		//1~45사이에 중복되지 낳은 수 6개를 입력하는 코드를 작성하세요 contains 메서드 이용
		Scanner scan = new Scanner(System.in);
		int [] user = new int[6];
		int count = 0;
		
		System.out.println();
		
		System.out.print("정수 6개 입력(중복 X, 1~45) : ");
		
		while(count < user.length) {
			int num = scan.nextInt();
			if(!contains(user, count, num) && (num >= min && num <= max)) {
				user[count] = num;
				count++;
			}
;		}
		for(int tmp : user) {
			System.out.print(tmp + " ");
		}
		System.out.println();
		scan.close();
		
		scan.close();
	}
	
	public static int randomUserArray(int min, int max) {
		if(max < min) {
			int tmp = max;
			max = min;
			min = tmp;
		}
		
		return 0;
	}
	/* 기능 : min ~ max 사이의 중복되지 않은 랜덤한 수를 배열에 만들어 주고 생성 여부를 알려주는 메서드
	 * 매게변수 : 최솟값, 최대값, 배열 => int min, int max, int [] arr
	 * 리턴타입 : 배열의 생성 여부 => boolean
	 * 메서드명 : createRandomArray
	 * */
	public static boolean createRandomArray(int min, int max, int [] arr) {
		
		
		if(arr == null || arr.length == 0) {
			return false;
		}
		//max가 min보다 작으면
		if(max < min) {
			int tmp = min;
			min = max;
			min = tmp;
		}
		
		//배열의 크기가 min~max사이의 정수 개수보다 클 때 
		if(arr.length > max - min + 1) {
			return false;
		}
		
		//반복문 : 저장된 숫자의 개수가 배열의 크기보다 작을 때 반복
		
		int count = 0; //저장 된 숫자의 개수
		while(count < arr.length) {
			//랜덤수 생성
			int r = random(min, max);
			// 중복 확인
			if(!contains(arr, count, r)) {
				// 중복 되지 않으면 배열에 저장
				arr[count] = r;
				//저장된 숫자의 개수를 1증가
				count++;
			}	
		}
			
		
		return true;
	}

	
	
	//[1, 2, 0, 0,0] => 배열에서 0번지부터 2개중에서 0과 일치하는 값이 있나? false
	/* 기능 : 배열이 주어지고 배열의 0번지부터 n개 중에서 num와 같은 값이 있는지 없는지 알려주는 메서드
	 * 매게변수 : 주어진 배열, 검사할 배열의 개수, 비교할 정수 => int [] arr, int n, int num
	 * 리턴타입 : 같은 값이 있는지 없는지 => boolean
	 * 메서드명 : contains
	 * */
	public static boolean contains(int [] arr, int n, int num) {
		
		//배열 생성이 안됐거나 크기가 0이면
		if(arr == null || arr.length == 0) {
			return false;
		}
		//배열의 크기보다 비교할 개수가 많으면
		if(arr.length < n) {
			n = arr.length; // 비교할 개수를 배열의 크기로 수정
		}
		for(int i = 0; i < n; i++) {
			//배열에 num와 같은 값이 있으면
			if(arr[i] == num) {
				return true;
			}
		}
		// 반복문이 끝날ㄸ떄까지 같은ㄷ게 없으면
		return false;
	}
	
	/*
	 * 기능 : min ~ max 사이에 랜덤한 수를 생성해서 알려주는 메서드
	 * 매게변수 : 최솟값과 최댓값 => int min, int max
	 * 리턴타입 : 생성된 랜덤한 수 => 정수 => int
	 * 메서드명 : random
	 * */
	
	public static int random(int min, int max) {
		if(max < min) {
			int tmp = max;
			max = min;
			min = tmp;
		}
		return (int) (Math.random() * (max - min + 1) + 1);
	}

}

 

배열 메소드2

package day07;

public class ArrayMethodEx2 {

	public static void main(String[] args) {
		int [] arr1 = new int[5];
		initArray1(arr1);
		printArray(arr1);
		
		int [] arr2 = new int[5];
		initArray2(arr2);
		printArray(arr2);
		
		int [] arr3 = initArray3(5);
		printArray(arr3);
	}
	
	public static void printArray(int []arr) {
		for(int tmp:arr) {
			System.out.print(tmp+" ");
		}
		System.out.println();
	}
	
	/* 기능 : 정수 배열에 1부터 순차적으로 저장하는 메서드(잘못된 메서드)
	 * 매개변수 : 정수 배열 => int []arr 
	 * 리턴타입 : 없음 => void
	 * 메서드명 : initArray
	 * */
	
	public static void initArray1(int []arr) {
		arr = new int[10];
		for(int i = 0; i < arr.length; i++) {
			arr[i] = i+1;
		}
	}
	
	/* 기능 : 정수 배열에 1부터 순차적으로 저장하는 메서드(올바른 메서드)
	 * 매개변수 : 정수 배열 => int []arr 
	 * 리턴타입 : 없음 => void
	 * 메서드명 : initArray2
	 * */
	public static void initArray2(int []arr) {
		for(int i = 0; i < arr.length; i++) {
			arr[i] = i+1;
		}
	}
	

	/* 기능 : 정수가 주어지면 정수 크기에 배열을 생성하고 배열에 1부터 순차적으로 저장하여 
	 * 		배열을 알려주는  메서드(다른 메서드)
	 * 매개변수 : 정수 배열 => int length 
	 * 리턴타입 : 셍성된 배열 => int []
	 * 메서드명 : initArray3
	 * */
	public static int [] initArray3(int length) {
		int arr[]= new int[length];
		for(int i = 0; i < arr.length; i++) {
			arr[i] = i+1;
		}
		return arr;
	}
	
}

 

 

메소드를 이용한 홀짝 게임

package day07;

import java.util.Scanner;

public class OddEvenGameEx1 {

	public static void main(String[] args) {
		/*
		 * 다음 기능을 가진 프로그램을 작성하세요. 메서드 이용
		 * -----------------------------
		 * 메뉴
		 * 1. 새 게임
		 * 2. 결과 조회
		 * 3. 프로그램 종료
		 * 메뉴 선택 : 1
		 * -----------------------------
		 * 선택(홀 : 1, 짝:0) : 1
		 * 3 홀입니다.
		 * 성공!
		 * -----------------------------
		 * 메뉴
		 * 1. 새 게임
		 * 2. 결과 조회
		 * 3. 프로그램 종료
		 * 메뉴 선택 : 2
		 * -----------------------------
		 * 결과 : 1승 0패
		 * -----------------------------
		 * 메뉴
		 * 1. 새 게임
		 * 2. 결과 조회
		 * 3. 프로그램 종료
		 * 메뉴 선택 : 3
		 * -----------------------------
		 * 프로그램 종료
		 * */
		
		//반복문 : 프로그램 종료를 선택하기 전까지 반봅
		int menu = 0;
		Scanner scan = new Scanner(System.in);
		int win = 0, lose = 0;
		
		do {
			// 메뉴 출력
			printMenu();
				// 메뉴 선택
			menu = scan.nextInt();
			int user = 0;
			System.out.println("--------------------------");
			switch(menu) {
			case 1:
				//새 게임 메서드
				System.out.print("선택 (홀 : 0, 짝 : 1) : ");
				user = scan.nextInt();
				boolean result = newGame(user);
				if(result) {
					win++;
				}else {
					lose++;
				}
				break;
				
			case 2:
				// 결과확인 메서드
				printRecord(win, lose);
				break;
				
			case 3:
				System.out.println("프로그램 종료");
				break;
				
			default:
				System.out.println("잘못된 메뉴 선택");
			}
				// 선택한 메뉴에따른 기능 시행
		}while(menu != 3);
			
		
		
	}
	
	/* 기능 : 랜덤으로 숫자를 생성하고, 정수(홀/짝)를 입력받아
	 * 		홀짝을 맞추고 승패를 알려주는 메서드
	 * 매개변수 : user
	 * 리턴타입 : int 
	 * 메서드명 : newGame
	 * */
	public static boolean newGame(int user) {
		
		int max = 100, min = 1; 
		int r = (int)(Math.random() * (max - min + 1) +1);
		if(r%2==0 && user%2 == 0) {
			System.out.println(r+"짝수입니다.");
			return true;
		}
		else if(r%2==1 && user%2 == 1) {
			System.out.println(r+"홀수입니다.");
			return true;
		}
		else {
			if(r%2==0) {
				System.out.println(r+"짝수입니다.");
				return false;
			}else {
				System.out.println(r+"홀수입니다.");
				return false;
			}
			
		}
	}
	
	//newGame다른방법
	public static boolean newGame() {
		//랜덤한 정수를 생성
		int r = random(1, 100);
		//정수를 입력받음
		Scanner scan = new Scanner(System.in);
		int user = scan.nextInt();
		System.out.println(r + " " + (r%2==0?"짝":"홀")+"입니다.");
		//승패를 알려줌
		return r % 2 == user;
		}
	
	public static void printMenu() {
		System.out.println("1. 새 게임");
		System.out.println("2. 결과 조회");
		System.out.println("3. 프로그램 종료");
		System.out.print("메뉴 선택 : ");
	}
	/* 기능 : 승 횟수와 패 횟수가 주어지면 a승 b패로 출력하는 메서드
	 * 매개변수 : 승 횟수와 패 횟수 => int win, int lose
	 * 리턴타입 : 없음 => void
	 * 메서드명 : printRecord
	 * */
	
	public static int random(int min, int max) {
		if(max < min) {
			int tmp = max;
			max = min;
			min = tmp;
		}
		return (int) (Math.random() * (max - min + 1) + 1);
	}
	public static void printRecord(int win, int lose) {
		System.out.println("결과 :  승 : "+win+" 패 : "+lose);
	}
}

 

메소드를 이용한 소수 판별 예제1

package day07;

public class PrimeNumberMethodEx1 {

	public static void main(String[] args) {
		// 주어진 num가 소수인지 아닌지 판별하는 코드를 작성 하세요 (메서드를 이용)
		int num = 2;
		if(isPrimeNumber(num)) {
			System.out.println(num + "소수");
		}
		else {
			System.out.println(num + "소수가 아닙니다.");
		}
		
		if(isPrimeNumber2(num)) {
			System.out.println(num + "소수");
		}
		else {
			System.out.println(num + "소수가 아닙니다.");
		}
	}
	/* 기능 : 정수가 주어지면 주어진 정수가 소수이면 소수라고 알려주고 아니면 아니라고 알려주는 매서드
	 * 매게 변수 : 정수 => int num
	 * 리턴 타입 : 소수인지 아닌지 => boolean
	 * 메서드 명 : isPrimeNumber
	 * */
	public static boolean isPrimeNumber(int num) {
		int count = 0; //약수의 개수를 저장하는 변수
		
		for(int i = 1;i < num; i++) {
			if(isDivisor(num, i)) {
				count++;
			}
		if(count ==2) {
			return true;
		}
			
		}
		
		return false;
	}
	/* 기능 : 정수 num1과 정수 num2가 주어졌을 때 num2가 num1의 약수이면 참, 아니면 거짓을 알려주는 매서드
	 * 매게변수 : 정수 num1과 정수 num2 => int num1, int num2
	 * 리턴타입 : 약수이거나 아니거나
	 * 매서드명 : isDrivisor
	 * */
	
	public static boolean isDivisor(int num1, int num2) {
		return num1 % num2 == 0;
	}
	//1과 자기 자신을 제외한 약수가 존재하면 소수가 아니고 존재하지 않으면 소수
	/* 기능 : 정수 num1과 정수 num2가 주어졌을 때 num2가 num1의 약수이면 참, 아니면 거짓을 알려주는 매서드
	 * 매게변수 : 정수 num1과 정수 num2 => int num1, int num2
	 * 리턴타입 : 약수이거나 아니거나
	 * 매서드명 : isPrimeNumber2
	 * */
	public static boolean isPrimeNumber2(int num) {
		
		for(int i = 2; i<num; i++) {
			if(isDivisor(num, i)) {
				return false;
			}
		}
		
		return num != 1;
	}
	

}

 

메소드를 이용한 소수 판별 예제2

package day07;

public class PrimeNumberMethodEx2 {

	public static void main(String[] args) {
		// 1~100사이의 소수를 출력하는 코드를 작성하세요
		for(int i = 1; i<=100;i++) {
			if(isPrimeNumber2(i)) {
				System.out.print(i + " ");
			}
		}
	}
	/* 기능 : 정수가 주어지면 주어진 정수가 소수이면 소수라고 알려주고 아니면 아니라고 알려주는 매서드
	 * 매게 변수 : 정수 => int num
	 * 리턴 타입 : 소수인지 아닌지 => boolean
	 * 메서드 명 : isPrimeNumber
	 * */
	public static boolean isPrimeNumber(int num) {
		int count = 0; //약수의 개수를 저장하는 변수
		
		for(int i = 1;i < num; i++) {
			if(isDivisor(num, i)) {
				count++;
			}
		if(count ==2) {
			return true;
		}
			
		}
		
		return false;
	}
	/* 기능 : 정수 num1과 정수 num2가 주어졌을 때 num2가 num1의 약수이면 참, 아니면 거짓을 알려주는 매서드
	 * 매게변수 : 정수 num1과 정수 num2 => int num1, int num2
	 * 리턴타입 : 약수이거나 아니거나
	 * 매서드명 : isDrivisor
	 * */
	
	public static boolean isDivisor(int num1, int num2) {
		return num1 % num2 == 0;
	}
	//1과 자기 자신을 제외한 약수가 존재하면 소수가 아니고 존재하지 않으면 소수
	/* 기능 : 정수 num1과 정수 num2가 주어졌을 때 num2가 num1의 약수이면 참, 아니면 거짓을 알려주는 매서드
	 * 매게변수 : 정수 num1과 정수 num2 => int num1, int num2
	 * 리턴타입 : 약수이거나 아니거나
	 * 매서드명 : isPrimeNumber2
	 * */
	public static boolean isPrimeNumber2(int num) {
		
		for(int i = 2; i<num; i++) {
			if(isDivisor(num, i)) {
				return false;
			}
		}
		
		return num != 1;
	}
	

}

 

'자바 기초 및 세팅' 카테고리의 다른 글

day08 (가변 매개변수,  (0) 2023.12.20
day08 클래스와 객체  (0) 2023.12.19
day07 (클래스와 객체, 함수)  (0) 2023.12.18
day06 : day02 ~ day05응용 예제  (2) 2023.12.18
day5 배열 예제 및 로또문제  (0) 2023.12.14