(int)(Math.random()*10)
이렇게 해서 0~9까지의 정수를 출력할 수 있지만 오늘 배운것은 random 생성자를 만들어서 활용하는 것을 배웠다.
import java.util.Random;
main method
Radom r = new Random();
int num = r.nextInt(10);
1.조건
(1) 랜덤으로 생성된 변수 2가지를 더하는 문장을 출력한다.
(2) 정답이라면 다음 문제로 넘어간다.
(3) 오답이라면 다시 풀 것인지 물어본다.
(4) 다시 푼다면 똑같은 문제를 다시 보여준다.
(5) 다시 안 푼다면 문제풀이 프로그램을 종료한다.
2.생각
처음엔 조건에 따라 코드를 완성하려 했다.
import java.util.Random;
import java.util.Scanner;
public class 문제 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Random r = new Random();
System.out.println("==plus game==");
while (true) {
int num1 = r.nextInt(10) + 1;
int num2 = r.nextInt(10) + 1;
System.out.println(num1 + "+" + num2 + "=");
int answer = scanner.nextInt();
if (num1 + num2 == answer) {
System.out.println("Success!");
continue;
} else {
System.out.println("Fail! 다시 도전하시겠습니까?");
String yesNo = scanner.next();
if (yesNo.equals("N")) {
System.out.println("시스템을 종료합니다.");
break;
} else {
while (num1 + num2 == answer) {
System.out.println(num1 + "+" + num2 + "=");
answer = scanner.nextInt();
if (num1 + num2 == answer) {
System.out.println("Success!");
continue;
} else {
System.out.println("Fail! 다시 도전하시겠습니까?");
yesNo = scanner.next();
if (yesNo.equals("N")) {
System.out.println("시스템을 종료합니다.");
break;
} else {
continue;
}
}
}
}
}
}
scanner.close();
}
}
하지만 제일 마지막 else 문에 들어있는 while문의 조건이 아니기에 실행이 되지 않았고 계속 틀렸다.
그리고 집에서 이 글을 작성하면서 문득 생각이 들었다.
while문이 실행되려면 틀려야 하니까 틀렸다면 계속 그 while문을 돌게 만들면 되겠다!
import java.util.Random;
import java.util.Scanner;
public class lab2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Random r = new Random();
System.out.println("==plus game==");
boolean flag = false;
while (true) {
int num1 = r.nextInt(10) + 1;
int num2 = r.nextInt(10) + 1;
System.out.println(num1 + "+" + num2 + "=");
int answer = scanner.nextInt();
if (num1 + num2 == answer) {
System.out.println("Success!");
continue;
} else {
System.out.println("Fail! 다시 도전하시겠습니까?");
String yesNo = scanner.next();
if (yesNo.equals("N")) {
System.out.println("시스템을 종료합니다.");
break;
} else {
while (num1 + num2 != answer) {
System.out.println(num1 + "+" + num2 + "=");
answer = scanner.nextInt();
if (num1 + num2 == answer) {
System.out.println("Success!");
break;
} else {
System.out.println("Fail! 다시 도전하시겠습니까?");
yesNo = scanner.next();
if (yesNo.equals("N")) {
System.out.println("시스템을 종료합니다.");
flag=true;
break;
} else {
continue;
}
}
}
if (flag == true) {
break;
}
}
}
}
scanner.close();
}
}
그리고 만들어진 코드...
추가적으로 배우며 2문 반복문 탈출하는 몇가지 방법을 익혔다.
1. 변수 Flag를 만들어 반복문이 돌때마다 flag가 true 인지 false인지 확인하여 2중 반복을 탈출하는 것.
2. 상위조건을 종료조건으로 만드는 것.
3. 파워 goto 문(?)
4. Function을 만들어 이른 return을 사용한다.
3번 4번은 아직 무슨말인지 모르겠다. 추가공부 필요...
그리고 동기들에게 힌트를 얻었다. 문제를 완전 다른 방향으로 생각하는 것...
틀릴 때 그 변수를 그대로 가지고 2중 while문을 만드는 것이 아닌
맞췄을 때 변수를 새로 생성하고 아닐 땐 그냥 계속 그 변수를 사용하는 것!
import java.util.Random;
import java.util.Scanner;
public class 문제 {
public static void main(String[] args) {
// 문자입력 방법
Scanner sc = new Scanner(System.in);
// System.out.print("문자입력 : ");
// String text = sc.next();
// System.out.println(text);
// 난수생성
Random r = new Random();
System.out.println("==Plus Game==");
int answer = 0;
String choice = "";
int num1 = r.nextInt(10) + 1;
int num2 = r.nextInt(10) + 1;
while (true) {
System.out.print(num1 + "+" + num2 + "=");
answer = sc.nextInt();
if (answer == (num1 + num2)) {
System.out.println("Success");
num1 = r.nextInt(10) + 1;
num2 = r.nextInt(10) + 1;
} else {
System.out.println("Fail");
System.out.print("다시 하시겠습니까 Y/N >> ");
choice = sc.next();
}
if (choice.equals("N")) {
break;
}
}
sc.close();
}
}
코드도 훨씬 간편해지고 많이 줄었다. 우리 반엔 참 똑똑한 놈들이 많은 것 같다...
더 분발해야겠다...
2중 반복문 탈출하는 법
현재는 삭제된 명령어.
절대 잊지 않을듯 충격이었음.. 스치듯 배웠더라도 배운 것인데 까먹다니...
분발해야겠다... 앞으로 주말마다 할 것. 내가 쓴 글 읽고 잊어버린 부분 다시 공부하기.....