password는 우리가 평소에도 많이 접하기 때문에 이해하기 쉬운 개념이다.
매우 적절하게 final을 배웠고, password는 값이 정해져있기 때문에 final을 쓰는것과, 변수를 대문자로 쓰는것 등등. 배운것이 바로 나오는 시간이었따.
package application;
import java.util.Scanner;
public class App {
public static void main(String[] args) {
final String USER_PASSWORD = "hello";
System.out.println("Enter password > ");
Scanner scanner = new Scanner(System.in);
String password = scanner.nextLine();
scanner.close();
if (password.equals(USER_PASSWORD)) {
System.out.println("Access granted.");
} else {
System.out.println("Access Denied. ");
}
}
}
일단 이렇게 작성.
하지만 비밀번호 창과 5조 5억번 이상의 대면식을 가졌던 나로서는, Access Denied되었을때 다시한번 패스워드 입력 창이 뜨도록 만들고싶어졌다. 그래서 일단 수업을 멈추고 챗지피티와 같이 한번 돌려봤다.
하나의 기능을 구현하는데 1) 다양한 방법이 있고 2) 경험이 많으면 간단하게, 유지보수 방법이 편하게 구현하고 3) 경험이 적을수록 구현에 대한 방법 가짓수가 적고, 그 리스트에 없을경우 당황하게된다.
챗지피티가 만든 방법은 날 당황하게 했음....
하지만 while을 쓴다는것과 !password를 쓰는 방법도 배웠으니 일단 접을까...
하고 다시 강의로 돌아왔는데 선생님이 아니나 다를까 Access Denied되었을때 패스워드 입력창이 뜨도록 만들어보라고...
그래서 일단 그냥 더듬더듬 써봤는데....
package application;
import java.util.Scanner;
public class Practice_02 {
public static void main(String[] args) {
final String USER_PASSWORD = "1234qwer";
System.out.println("Enter the Password > ");
Scanner scanner = new Scanner(System.in);
String password = scanner.nextLine();
scanner.close();
while (true) {
if (!password.equals(USER_PASSWORD)) {
System.out.println("Access denied. ");
} else
System.out.println("입장하십시오.");
}
}
}
무한의 루프에 빠져벌임....ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
하. 진짜 너무 어이없고 웃겨서 일단 멈춤하고 코드 그대로 복붙해서 챗지피티에게 가져감.


챗지피티 설명에 의하면 내 코드가 똥망이 이유는
password를 while 안에서 다시 안 받음
- 처음 입력한 비밀번호가 틀리면 → 영원히 Access denied. 무한 반복
- 처음 입력한 비밀번호가 맞으면 → 영원히 입장하십시오. 무한 반복
즉, 조건은 돌고 있는데 값은 변하지 않는 상태
일단 무슨말인지는 모르겠지만, 보여준 예시코드에 break;가 있길래,
아, 그럼 break만 걸면 되는거 아냐? 라고 그냥 단순하게 break만 추가했더니
package application;
import java.util.Scanner;
public class Practice_02 {
public static void main(String[] args) {
final String USER_PASSWORD = "1234qwer";
System.out.println("Enter the Password > ");
Scanner scanner = new Scanner(System.in);
String password = scanner.nextLine();
scanner.close();
while (true) {
if (!password.equals(USER_PASSWORD)) {
System.out.println("Access denied. ");
} else
System.out.println("입장하십시오.");
break;
}
}
}
루프가 돌지 않음;;;;
아주 깔끔하게 그냥 잘라줘버리네;

그래서 그냥 시키는대로 일단, while 문 안으로 질문을 넣고, ...
또 break; 위치가 달라서 이상해지는데,
괄호 한 두개 이상 넘어가면 도대체 왜 이 조건문에서 이게 내맘대로 안되는지 이해가 안가고...
하.
package application;
import java.util.Scanner;
public class Practice_02 {
public static void main(String[] args) {
final String USER_PASSWORD = "1234qwer";
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("Enter the Password > ");
String password = scanner.nextLine();
if (!password.equals(USER_PASSWORD)) {
System.out.println("Access denied. ");
} else {
System.out.println("입장하십시오.");
break;
}
}
scanner.close();
}
}
일단 오늘은 할 수 있는 만큼만 한걸로.


그. 런. 데 말입니다.
import java.util.Scanner;
public class App {
public static void main(String[] args) {
final String USER_PASSWORD = "1234asdf";
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("Enter password> ");
String password = scanner.nextLine();
if (password.equals(USER_PASSWORD)) {
System.out.println("Access Granted.");
break;
} else {
System.out.println("Access Denied.");
}
}
scanner.close();
}
}
선생님이 그 다음시간에 공개한 정답지를 보면, break;가 챗지피티랑 다른곳에 붙어있다.
챗지피티는 else안에,
선생님은 if 안에 break를 넣어둠.

그래도 기능은 동일하다.
알 수 없는 프로그래밍의 세계.
모로가도 실행만 되면 된다 이거아니겠냐능... ㅎ
해피코딩
'콤퓨타 > Programming) 왕초보 자바' 카테고리의 다른 글
| (번외) do while 연습 (feat. 증감연산자) (1) | 2025.08.11 |
|---|---|
| 25. (Loops and Conditions) Do While Loop (1) | 2025.08.11 |
| 23. (Loops and Conditions) Break (3) | 2025.08.10 |
| 22. (Loops and Conditions) The Final Keyword (1) | 2025.08.10 |
| 21. (Loops and Conditions) The String Equals Method (7) | 2025.08.10 |