사용한 개념은..조건문, 반복문, 함수, 입력 등등..선행학습도 행했습니다.
평소에 게임을 좋아하다보니까 이런 저런 계산들 다 넣으니, 하나의 게임이 만들어진 느낌이네요.
하나하나 까보겠습니다.
Scanner scanner = newScanner(System.in);
int start = 0;
int end = 0;
int breakAt = 0;
while(true) {
System.out.print("숫자 몇 부터 시작할까요? : ");
start = scanner.nextInt();
if(start < 0) {
System.out.println("음수는 취급 안 합니다.다시 정해주시죠.");
continue;
}
break;
}
while(true) {
System.out.print("몇 까지 반복 할까요? (현재 정한 시작 값 : "+ start + ") : ");
end = scanner.nextInt();
if(end <= start) {
System.out.println("끝 값은 시작 값 보다 작거나 같을 수 없습니다.다시 시도해주세요.");
continue;
}
break;
}
while(true) {
System.out.println("중간에 값을 끊으실 건가요? (현재 정한 시작 값 : "+ start + ",끝 값 : "+ end + ") : ");
System.out.println("동의 명령어 : Y,예,네,ㅇㅇ");
System.out.println("거부 명령어 : N,아니요,아니오,ㄴㄴ");
System.out.print("입력 : ");
String check = scanner.next();
if(check.equals("Y") || check.equals("y") || check.equals("예") || check.equals("네") || check.equals("ㅇㅇ")) {
breakAt = getBreakPoint(scanner, start, end); // 중간값 지정 함수
break;
} else if(check.equals("N") || check.equals("n") || check.equals("아니요") || check.equals("아니오") || check.equals("ㄴㄴ")) {
breakAt = end;
break;
} else{
System.out.println("명령어에 없는 문자입니다.다시 시도해주세요.");
continue;
}
}
우선 Main 함수에 값을 입력 받아야겠죠
각각 시작 값, 끝 값 그리고 중간에 끊을 값을 정합니다.
수많은 if들은 방어코딩이라고 그…이상한 입력 안 받도록..네
중간에 끊을 값은 지정할지 지정 안 할지를 정합니다. 지정을 안 하면 end값으로 값이 할당됩니다.
public static int getBreakPoint(Scanner scan, int start, int end) {
int breakAt = 0;
while(true) {
System.out.print("값을 입력 해 주세요. (현재 정한 시작 값 : "+ start + ",끝 값 : "+ end + ") : ");
breakAt = scan.nextInt();
if(breakAt <= start + 10) {
System.out.println("못 해도 시작값 + 10보다 커야 합니다!");
continue;
} else if(breakAt == end) {
return end; //지정 안 된거 확인 됐으니 그냥 return
} else if(breakAt > end) {
System.out.println("중간 값이 끝 값보다 클 수 없습니다!");
continue;
}
break;
}
return breakAt;
}
중간에 끊을 값을 입력받는 함수입니다.
while(true) {
String[] mathList = {"배수", "10의자리가N", "1의자리가N", "379놀이"};
System.out.println("어떤 계산을 할 건가요?번호를 입력 해주세요.");
for(int i = 0; i < mathList.length; i++) {
System.out.println(i + 1+ ". "+ mathList[i]);
}
System.out.print("번호 입력 : ");
intchooseNumber = scanner.nextInt();
if(chooseNumber > mathList.length) {
System.out.println("리스트에 없는 요청입니다.");
continue;
}
calculate(scanner, chooseNumber - 1, mathList, start, end, breakAt);
break;
}
값을 다 지정했으니 이제 4가지의 연산들 중 하나를 선택합니다. 왜 379인지는 나도 몰라요.
public static void calculate(Scanner scan, int choseNum, String[] mathLists, int start, int end, int breakAt) {
if(mathLists[choseNum].equals(mathLists[0])) {
multiples(scan, start, end, breakAt);
} else if(mathLists[choseNum].equals(mathLists[1])) {
getTensDigit(scan, start, end, breakAt);
} else if(mathLists[choseNum].equals(mathLists[2])) {
getOnesDigit(scan, start, end, breakAt);
} else{
threeSevenNine(scan, start, end, breakAt);
}
}
게임이 정해지면 calculate함수로 와서 필터링을 합니다. 여기가 좀 부족했나 싶었어요 제일 고민 많이 했던 곳이기도 하고
public static void multiples(Scanner scan, int start, int end, int breakAt) {
int multiple = 0;
while(true) {
System.out.print("몇의 배수를 적으실 건가요? (현재 정한 시작 값 : "+ start + ",끝 값 : "+ end + ",중앙 값 : "+ breakAt + ") : ");
multiple = scan.nextInt();
if(multiple == 0|| multiple < start || multiple > breakAt) {
System.out.println("그 값은 사용할 수 없습니다.");
continue;
}
break;
}
for(int i = start; i <= end; i++) {
if(i % multiple == 0) {
System.out.println(multiple + "의 배수 발견! : "+ i);
}
if(breakAt != end && i == breakAt) {
System.out.println("중간 값 "+ breakAt + "에 도달 했습니다.프로그램을 종료합니다.");
return;
}
}
}
public static void getTensDigit(Scanner scan, int start, int end, int breakAt) {
int n = 0;
while(true) {
System.out.print("숫자를 입력해주세요.(0초과 10미만) : ");
n = scan.nextInt();
if(n <= 0|| n >= 10) {
System.out.println("그 값은 사용할 수 없습니다.");
continue;
}
break;
}
for(inti = start; i <= end; i++) {
intten = 0;
if(i >= 100) {
ten = (i % 100) / 10;
} else{
ten = i / 10;
}
if(ten == n) {
System.out.println("10의 자리가 n인 수 발견! : "+ i);
}
if(breakAt != end && i == breakAt) {
System.out.println("중간 값 "+ breakAt + "에 도달 했습니다.프로그램을 종료합니다.");
return;
}
}
}
public static void getOnesDigit(Scanner scan, int start, int end, int breakAt) {
int n = 0;
while(true) {
System.out.print("숫자를 입력해주세요.(0초과 10미만) : ");
n = scan.nextInt();
if(n <= 0|| n >= 10) {
System.out.println("그 값은 사용할 수 없습니다.");
continue;
}
break;
}
for(int i = start; i <= end; i++) {
if(i % 10== n) {
System.out.println("1의 자리가 n인 수 발견! : "+ i);
}
if(breakAt != end && i == breakAt) {
System.out.println("중간 값 "+ breakAt + "에 도달 했습니다.프로그램을 종료합니다.");
return;
}
}
}
public static void threeSevenNine(Scanner scan, int start, int end, int breakAt) {
System.out.println("379게임 시작!");
for(int i = start; i <= end; i++) {
int jjak = i % 10;
if(jjak == 3|| jjak == 7|| jjak == 9){
System.out.println("짝!("+ i + ")");
}else{
System.out.println(i);
}
}
}
이제 선택한 연산에 따라 함수가 실행될겁니다.
전반적인 흐름은 이렇습니다.
이제 전체코드 봅시닼ㅋㅋㅋㅋㅋㅋ
package ch06;
import java.util.Scanner;
public classEx2 {
public static int getBreakPoint(Scanner scan, int start, int end) {
int breakAt = 0;
while(true) {
System.out.print("값을 입력 해 주세요. (현재 정한 시작 값 : "+ start + ",끝 값 : "+ end + ") : ");
breakAt = scan.nextInt();
if(breakAt <= start + 10) {
System.out.println("못 해도 시작값 + 10보다 커야 합니다!");
continue;
} else if(breakAt == end) {
returnend;
} else if(breakAt > end) {
System.out.println("중간 값이 끝 값보다 클 수 없습니다!");
continue;
}
break;
}
return breakAt;
}
public static void calculate(Scanner scan, int choseNum, String[] mathLists, int start, int end, int breakAt) {
if(mathLists[choseNum].equals(mathLists[0])) {
multiples(scan, start, end, breakAt);
} else if(mathLists[choseNum].equals(mathLists[1])) {
getTensDigit(scan, start, end, breakAt);
} else if(mathLists[choseNum].equals(mathLists[2])) {
getOnesDigit(scan, start, end, breakAt);
} else{
threeSevenNine(scan, start, end, breakAt);
}
}
public static void multiples(Scanner scan, int start, int end, int breakAt) {
int multiple = 0;
while(true) {
System.out.print("몇의 배수를 적으실 건가요? (현재 정한 시작 값 : "+ start + ",끝 값 : "+ end + ",중앙 값 : "+ breakAt + ") : ");
multiple = scan.nextInt();
if(multiple == 0|| multiple < start || multiple > breakAt) {
System.out.println("그 값은 사용할 수 없습니다.");
continue;
}
break;
}
for(int i = start; i <= end; i++) {
if(i % multiple == 0) {
System.out.println(multiple + "의 배수 발견! : "+ i);
}
if(breakAt != end && i == breakAt) {
System.out.println("중간 값 "+ breakAt + "에 도달 했습니다.프로그램을 종료합니다.");
return;
}
}
}
public static void getTensDigit(Scanner scan, int start, int end, int breakAt) {
int n = 0;
while(true) {
System.out.print("숫자를 입력해주세요.(0초과 10미만) : ");
n = scan.nextInt();
if(n <= 0|| n >= 10) {
System.out.println("그 값은 사용할 수 없습니다.");
continue;
}
break;
}
for(inti = start; i <= end; i++) {
intten = 0;
if(i >= 100) {
ten = (i % 100) / 10;
} else{
ten = i / 10;
}
if(ten == n) {
System.out.println("10의 자리가 n인 수 발견! : "+ i);
}
if(breakAt != end && i == breakAt) {
System.out.println("중간 값 "+ breakAt + "에 도달 했습니다.프로그램을 종료합니다.");
return;
}
}
}
public static void getOnesDigit(Scanner scan, int start, int end, int breakAt) {
int n = 0;
while(true) {
System.out.print("숫자를 입력해주세요.(0초과 10미만) : ");
n = scan.nextInt();
if(n <= 0|| n >= 10) {
System.out.println("그 값은 사용할 수 없습니다.");
continue;
}
break;
}
for(int i = start; i <= end; i++) {
if(i % 10== n) {
System.out.println("1의 자리가 n인 수 발견! : "+ i);
}
if(breakAt != end && i == breakAt) {
System.out.println("중간 값 "+ breakAt + "에 도달 했습니다.프로그램을 종료합니다.");
return;
}
}
}
public static void threeSevenNine(Scanner scan, int start, int end, int breakAt) {
System.out.println("379게임 시작!");
for(int i = start; i <= end; i++) {
int jjak = i % 10;
if(jjak == 3|| jjak == 7|| jjak == 9){
System.out.println("짝!("+ i + ")");
}else{
System.out.println(i);
}
}
}
public static void main(String[] args) {
Scanner scanner = newScanner(System.in);
intstart = 0;
intend = 0;
intbreakAt = 0;
while(true) {
System.out.print("숫자 몇 부터 시작할까요? : ");
start = scanner.nextInt();
if(start < 0) {
System.out.println("음수는 취급 안 합니다.다시 정해주시죠.");
continue;
}
break;
}
while(true) {
System.out.print("몇 까지 반복 할까요? (현재 정한 시작 값 : "+ start + ") : ");
end = scanner.nextInt();
if(end <= start) {
System.out.println("끝 값은 시작 값 보다 작거나 같을 수 없습니다.다시 시도해주세요.");
continue;
}
break;
}
while(true) {
System.out.println("중간에 값을 끊으실 건가요? (현재 정한 시작 값 : "+ start + ",끝 값 : "+ end + ") : ");
System.out.println("동의 명령어 : Y,예,네,ㅇㅇ");
System.out.println("거부 명령어 : N,아니요,아니오,ㄴㄴ");
System.out.print("입력 : ");
String check = scanner.next();
if(check.equals("Y") || check.equals("y") || check.equals("예") || check.equals("네") || check.equals("ㅇㅇ")) {
breakAt = getBreakPoint(scanner, start, end);
break;
} else if(check.equals("N") || check.equals("n") || check.equals("아니요") || check.equals("아니오") || check.equals("ㄴㄴ")) {
breakAt = end;
break;
} else{
System.out.println("명령어에 없는 문자입니다.다시 시도해주세요.");
continue;
}
}
while(true) {
String[] mathList = {"배수", "10의자리가N", "1의자리가N", "379놀이"};
System.out.println("어떤 계산을 할 건가요?번호를 입력 해주세요.");
for(int i = 0; i < mathList.length; i++) {
System.out.println(i + 1+ ". "+ mathList[i]);
}
System.out.print("번호 입력 : ");
intchooseNumber = scanner.nextInt();
if(chooseNumber > mathList.length) {
System.out.println("리스트에 없는 요청입니다.");
continue;
}
calculate(scanner, chooseNumber - 1, mathList, start, end, breakAt);
break;
}
}
}
100% 수작업 (NO AI)고, 1시간 30분정도 걸린 것 같네요. 솔직히 이거 별로 안어렵습니다 코드가 길 뿐이지..
갈 길이 멀군요.