[문제]
사용자가 입력한 값이 배열에 있는지 검색하여
있으면 “OOO 치킨 배달 가능“, 없으면 “OOO 치킨은 없는 메뉴입니다“를 출력하세요.
단, 치킨 메뉴가 들어가있는 배열은 본인 스스로 정하세요.
ex.
치킨 이름을 입력하세요 : 양념 치킨 이름을 입력하세요 : 불닭
양념치킨 배달 가능 불닭치킨은 없는 메뉴입니다.
public void practice9() {
// 치킨 이름 입력받기
System.out.print("치킨 이름을 입력하세요: ");
String name = sc.nextLine();
// 치킨 메뉴가 들어가 있는 배열 설정(문제에서 스스로 "값을 넣어둔 배열"을 만들어 놓으라고 함)
String menu = "후라이드,양념,순살,슈프림양념";
String[] menuArr = menu.split(","); // split구문 활용하여 ,로 연결된 문자열을 배열화시킴
// 사용자가 입력한 치킨 이름이 메뉴 배열에 들어가 있는지 확인하는 작업
for(int i = 0; i < menuArr.length; i++) { // 메뉴 배열의 길이만큼 반복 돌리기
if(name.equals(menuArr[i])) {
System.out.printf("%s치킨 배달 가능", name);
return;
} else {
System.out.println(name + "치킨은 없는 메뉴입니다.");
return;
}
}
}
[실패 방법 1]
현재 배열의 상태
배열 순서 | arr[0] | arr[1] | arr[2] | arr[3] |
배열 값 | 후라이드 | 양념 | 순살 | 슈프림양념 |
if문을 돌렸을 때 배열의 첫 번째 값과 입력값이 일치하지 않는다면 for문을 다 돌기 전에 "없는 메뉴" 출력문을 내 보냄
배열의 2, 3, 4번째 값과 일치함에도 불구하고 없는 메뉴 출력문과 배달 가능 출력문이 모두 나옴
후라이드를 입력했을 때의 출력문
후라이드치킨 배달 가능
양념을 입력했을 때의 출력문
양념치킨은 없는 메뉴입니다.
양념치킨 배달 가능
public void practice9() {
// 치킨 이름 입력받기
System.out.print("치킨 이름을 입력하세요: ");
String name = sc.nextLine();
// 치킨 메뉴가 들어가 있는 배열 설정(문제에서 스스로 "값을 넣어둔 배열"을 만들어 놓으라고 함)
String menu = "후라이드,양념,순살,슈프림양념";
String[] menuArr = menu.split(","); // split구문 활용하여 ,로 연결된 문자열을 배열화시킴
// 사용자가 입력한 치킨 이름이 메뉴 배열에 들어가 있는지 확인하는 작업
for(int i = 0; i < menuArr.length; i++) { // 메뉴 배열의 길이만큼 반복 돌리기
switch(name) {
case "후라이드" : System.out.print("후라이드치킨 배달 가능");
return;
case "양념" : System.out.println("양념치킨 배달 가능");
return;
case "순살" : System.out.println("순살치킨 배달 가능");
return;
case "슈프림양념" : System.out.println("슈프림양념치킨 배달 가능");
return;
default : System.out.printf("%s치킨은 없는 메뉴입니다.", name);
return;
}
}
}
[실패 방법 2]
출력에는 문제 없음
하지만...
switch 문을 사용할 시 입력받은 문자열인 name만 사용하고,
메뉴 배열의 "길이"만 이용할 뿐 메뉴 배열의 내용을 전혀 사용하지 않음
== 요구사항을 전혀 만족하지 못함
[현재 코드상의 문제점 파악]
문자열이 배열 내용과 일치하는지, 하지 않는지로만 따지면서 4번의 반복을 돌고, 4번의 출력을 함
일치할 때의 출력문에 return을 걸어 준다 하더라도 배열의 0번째 방과 일치하지 않는다면,
for문 돌 때마다 일치하기 전까지 무조건 "없는 메뉴입니다"를 출력함
[해결 방법]
조건을 다르게 걸어 주자!
조건1. 문자열과 배열 내용이 일치할 때는 배달 가능 (기존과 동일)
조건2. for문의 마지막까지 일치하지 않는다면 그때 없는 메뉴를 출력해라! (new!)
=> else if문으로 기존 for문의 i가 menuArr.length와 같을 때 "없는 메뉴" 출력문을 나오게 함
조건3. 조건1, 2와 일치하는 상황이 아니라면(문자열과 배열값이 일치하지 않고, 현재 마지막 for문을 도는 게 아니라면)
아무것도 하지 말고 그냥 증감식으로 올라가라!
public void practice9() {
// 치킨 이름 입력받기
System.out.print("치킨 이름을 입력하세요: ");
String name = sc.nextLine();
// 치킨 메뉴가 들어가 있는 배열 설정(문제에서 스스로 "값을 넣어둔 배열"을 만들어 놓으라고 함)
String menu = "후라이드,양념,순살,슈프림양념";
String[] menuArr = menu.split(","); // split구문 활용하여 ,로 연결된 문자열을 배열화시킴
// 사용자가 입력한 치킨 이름이 메뉴 배열에 들어가 있는지 확인하는 작업
for(int i = 0; i < menuArr.length; i++) { // 메뉴 배열의 길이만큼 반복 돌리기
if( menuArr[i].equals(name) ) {
System.out.println(name + "치킨 배달 가능");
return;
} else if (i == menuArr.length -1) {
System.out.println(name + "치킨은 없는 메뉴입니다.");
} else {
continue;
}
}
}