JAVA 반복문+, 랜덤함수

강정우·2022년 6월 27일
0

JAVA

목록 보기
6/31
post-thumbnail

6/27 강의

  1. HTML, CSS 마지막 강의 font-end를 하기에 너무너무 부족하고 짧으며 실제 템플릿을 봤는데 안에 들어있는 내용이 상당했다.
    sass 와 script는 기본이고 css도 3천줄이 넘어갔다. 나는 back-end반이고 최종적으로 data쪽으로 넘어가고 싶지만 그래도 남은 시간을 쪽내서 조금씩 공부를 해야겠다...
  2. java 반복문에 들어갔다. 마지막 문제가 생각보다 안 풀려서 매우 분에 찼다... 발상의 전환이란 매우 중요한 것 같다...
  3. 개발자가 잘 해야하는 것 2가지 1. 주석처리 2. 중간중간 값 찍어보기
  4. 문제를 크게 본 다음 한 스텝 한 스텝 쪼개서 구현하기!!

#5 JAVA 복습

1. 반복문의 종류

  1. while 2. do while 3. for문

2. random 생성자

(int)(Math.random()*10)

이렇게 해서 0~9까지의 정수를 출력할 수 있지만 오늘 배운것은 random 생성자를 만들어서 활용하는 것을 배웠다.

import java.util.Random;
main method
Radom r = new Random();
int num = r.nextInt(10);

3. while문 알고리즘

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중 반복문 탈출하는 법

1. 변수 Flag를 만들어 반복문이 돌때마다 flag가 true 인지 false인지 확인하여 2중 반복을 탈출하는 것.

2. 상위조건을 종료조건으로 만드는 것.

3. goto문

현재는 삭제된 명령어.

4. Function을 만들어 이른 return을 사용한다.

5. labeling을 통한 반복문 탈출!!!

절대 잊지 않을듯 충격이었음.. 스치듯 배웠더라도 배운 것인데 까먹다니...
분발해야겠다... 앞으로 주말마다 할 것. 내가 쓴 글 읽고 잊어버린 부분 다시 공부하기.....

profile
智(지)! 德(덕)! 體(체)!

0개의 댓글