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 |