본문 바로가기

콤퓨타/Programming) 왕초보 자바

30. (Loops and Conditions) Exercise

 

배운내용: 

.isEmpty()  문자열 메서드 하나 추가

continue;  break;의 반대인듯 

else if (answer.isEmpty()) {

continue;

 


 

 

드디어 반복절 조건절 끝이 보인다. 

여태 배웠던 내용을 섞어서 연습문제로 내주셨는데 내용은 다음과 같다.

 

 

 

 

 

일단 문제는 뭐냐면 생각이가 안난다. 

하. 

그냥 코드 쌩으로 받아 적을때나 좋았지. 막상 하려니까 왜 하나도 모르겠는것인가? 

 

생각나는대로 꾸역꾸역 그냥 아무렇게나 적어본다. 

String answer;  선언은 여기서 하는게 맞는지

answer = scanner.nextLine(); 은 이게 왜 이렇게 생각이 안나는지 또 앞에 exercise 가서 흘끗 보고 왔는데, 이게 여기 들어가는지 아니면 중괄호 안에 들어가는지도 확실하게 모르겟고 일단 생각나는거 냅다 다 적어버림...ㅠㅠㅠ

 

import java.util.Scanner;

public class Practice_01 {

	public static void main(String[] args) {

		System.out.println("Enter a command >");

		Scanner scanner = new Scanner(System.in);

		String answer;
		answer = scanner.nextLine();

		do {
			System.out.println("Enter a command! > ");
		
		if (answer.equalsIgnoreCase("start")) {
			System.out.println("MAchine starting .... ");
		} else if (answer.equalsIgnoreCase("stop")) {
			System.out.println("Maching stopping .... ");
		} else if (answer.equals("quit")) {
			System.out.println("Exiting...");
		}
		scanner.close();
	} 
	}
}

 

그리고 일단 커멘드 입력창은 반복이 되어야 하니까 do-while 써야겠다라고만 생각하고 냅다 do를 적어놨는데 

콘솔창에서 while 내놓으라고 시위 ㅋㅋㅋㅋㅋ

 

 

 

챗지피티 소환. 

 

import java.util.Scanner;

public class Practice_02 {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);

		while (true) {

			System.out.println("Enter a command > ");
			String answer = scanner.nextLine();

			if (answer.equalsIgnoreCase("start")) {
				System.out.println("Machine Starting...");
			} else if (answer.equalsIgnoreCase("stop")) {
				System.out.println("Maching stopping...");

			} else if (answer.equals("quit")) {
				System.out.println("Exiting...");
				break;
			} else if (answer.isEmpty()) {
				continue;
			} else {
				System.out.println("unknown command!");
			}
		}

		scanner.close();

	}

}

 

그리고 갓벽한 코드; ㅎㅎ

 

 

 

일단 코드 따라 적고 마무리. 

 

 

선생님의 모범답안 

 

import java.util.Scanner;

public class Answer {

	public static void main(String[] args) {

		final String START = "start";
		final String STOP = "stop";
		final String QUIT = "quit";

		Scanner scanner = new Scanner(System.in);

		while (true) {
			System.out.print("Enter a Command > ");
			String input = scanner.nextLine();

			if (input.length() != 0) {

				if (input.equalsIgnoreCase(START)) {
					System.out.println("MAching starting...");
				} else if (input.equalsIgnoreCase(STOP)) {
					System.out.println("Maching stopping...");

				} else if (input.equalsIgnoreCase(QUIT)) {
					break;
				} else {
					System.out.println("Unrecognized Command.");
				}

			}

		}

		scanner.close();
	}

}

각 문자열을 fianl 처리 해서 매번 문자열 적을때  "" 요거 필요 없음. 

String.length() !=0 0이 아닐 시 이후부터 조건이 진행되도록 유도 

 

근데 선생님이 여기서 while 말고 do -while로 바꾸고 boolean 넣어서 falg 로 작성해보라고 물어보심. 

하. 나는 그거 할 마음의 여유가 있지 않아... 

마음의 여유 없는 이유 = 할 줄 몰라서... ㅠㅠ

 

그래도 일단 시도 ㄱㄱ

 

그러니까, 결국 flag 실행이 됐냐 안됐냐니까 

뭘 true/false로 넣냐면 

여기서는 분기점이 나뉘는게 프로그램 종료 아니면 계속 하는거니까 

boolean (ticket) = false; 

false 인경우에는 종료 없음

true 인경우에는 프로그램 종료되도록? 

라고 생각해고 내가 생각나는 코드 아무거나 때려박기 신공.... ^^

 

import java.util.Scanner;

public class Answer02 {

	public static void main(String[] args) {

		final String START = "start";
		final String STOP = "stop";
		final String QUIT = "quit";

		Scanner scanner = new Scanner(System.in);
		
		boolean ticket = false; 
		
		do {
			System.out.print("Enter a Command > ");
			String input = scanner.nextLine();

			if (input.length() != 0) {

				if (input.equalsIgnoreCase(START)) {
					System.out.println("MAching starting...");
					ticket = false; 
				} else if (input.equalsIgnoreCase(STOP)) {
					System.out.println("Maching stopping...");
					ticket = false; 
				} else if (input.equalsIgnoreCase(QUIT)) {
					ticket = true;
					break;
				} else {
					System.out.println("Unrecognized Command.");
				}

			}

		} while (ticket = ture) {
			System.out.println(프로그램이 성공적으로 종료되었습니다.);
		}

		scanner.close();
	}

}

 

은 wouldn't work 이라는것을 나도 알고 있었지. 그래서 선생님 답지를 보니. 

import java.util.Scanner;

public class Answer02 {

	public static void main(String[] args) {

		final String START = "start";
		final String STOP = "stop";
		final String QUIT = "quit";

		Scanner scanner = new Scanner(System.in);

		boolean running = true;

		do {
			System.out.print("Enter a Command > ");
			String input = scanner.nextLine();

			if (input.length() != 0) {

				if (input.equalsIgnoreCase(START)) {
					System.out.println("MAching starting...");

				} else if (input.equalsIgnoreCase(STOP)) {
					System.out.println("Maching stopping...");

				} else if (input.equalsIgnoreCase(QUIT)) {
					running = false;
					break;
				} else {
					System.out.println("Unrecognized Command.");
				}

			}
		}

		while (running);
		scanner.close();
	}

}

 

플래그값 runnning을 true로 먼저 주고, 

QUIT의 경우에만 runnnig = false로 넣어준다. 

 

혹은, 챗지피티가 언급한 continuel; 도 쌤이 알려줌 

continue 의 핵심은 

현재 반복(loop)에서 남아 있는 코드를 전부 건너뛰고, 곧바로 다음 반복으로 진행
즉, 같은 루프 안에서 뒤에 오는 if-else들은 전혀 실행되지 않음

 

 

import java.util.Scanner;

public class Answer02 {

	public static void main(String[] args) {

		final String START = "start";
		final String STOP = "stop";
		final String QUIT = "quit";

		Scanner scanner = new Scanner(System.in);

		boolean running = true;

		do {
			System.out.print("Enter a Command > ");
			String input = scanner.nextLine();

			if (input.length() == 0) {
				continue;
			}
			if (input.equalsIgnoreCase(START)) {
				System.out.println("MAching starting...");

			} else if (input.equalsIgnoreCase(STOP)) {
				System.out.println("Maching stopping...");

			} else if (input.equalsIgnoreCase(QUIT)) {
				running = false;
				break;
			} else {
				System.out.println("Unrecognized Command.");
			}

		}

		while (running);
		scanner.close();
	}

}

 

 

후. 

이게 하나하나 배울땐 뭐... 그나마 이해가 되는데 , 이걸 합쳐서 구조적으로 다뤄야 하는 건 . 

좀 만히 어렵다. 구조적 생각하기 준비가 안되어있을수록 더 어려운 것 같다. 

프로그래밍 공부하는거.. 뭐 개발자 될 거라고 생각하지는 않았지만. 

생각보다 더 길게 봐얄지도 모르겠다. 

흑흑

 

해피코딩