1주차 숙제 내용
💁♀️ 요리 레시피 메모장 만들기
입력값
- 내가 좋아하는 요리 제목을 먼저 입력합니다.
- 요리 별점을 1~5 사이의 소수점이 있는 실수로 입력해주세요. (ex. 3.5)
- 이어서 내가 좋아하는 요리 레시피를 한 문장씩 10문장을 입력합니다.
출력값
- 입력이 종료되면 요리 제목을 괄호로 감싸서 먼저 출력 해줍니다.
- 이어서, 요리 별점을 소수점을 제외한 정수로만 출력해줍니다. (ex. 3)
- 바로 뒤에 정수별점을 5점만점 퍼센트로 표현했을 때 값을 실수로 출력해줍니다. (ex. 60.0%)
- 이어서, 입력한 모든 문장 앞에 번호를 붙여서 모두 출력 해줍니다.
첫번째 답안
public class Main {
public static void main(String[] args) {
System.out.println("[ " + "닭도리탕 만들기" + " ]"); // 요리 제목
double dfoodScore = 4.3;
double maxScore = 5.0; // 5점 만점
int ifoodScore;
ifoodScore = (int)dfoodScore; // 4.3 -> 4
double percentScore = (4.3 / 5.0) * 100;
System.out.println(dfoodScore + " (" + percentScore + "%" + ")");
System.out.println("1. 닭과 각종 채소를 손질하여 준비합니다.");
System.out.println("2. 냄비에 물을 끓여 기름기를 제거한 닭고기를 넣고 익힙니다.");
System.out.println("3. 끓는 물에 닭을 넣고 5-10분간 데칩니다.");
System.out.println("4. 닭을 뺀 후 냄비에 식용유를 두르고 다진 마늘, 다진 생강을 볶습니다.");
System.out.println("5. 고추장과 고춧가루를 넣고 함께 볶아 양념을 만듭니다.");
System.out.println("6. 데친 닭과 채소를 함께 넣고 끓입니다.");
System.out.println("7. 다진 파, 대파를 넣고 양념이 고루 배어들도록 섞어줍니다.");
System.out.println("8. 감자, 당근 등 추가적인 채소를 넣고 끓입니다.");
System.out.println("9. 맛을 낼 목적으로 소금, 후추 등으로 간을 맞춥니다.");
System.out.println("10. 재료가 잘 익고 국물이 어우러지면 완성된 닭도리탕을 그릇에 담아 마무리합니다.");
}
}
출력 결과는 같았으나 정답 확인 결과 내가 문제를 잘못 이해한 것을 알았다.
문제에서는 직접 입력해야 했던 것.
힌트를 보며 새로 작성하다가 println으로 출력해 체크해보려했는데
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextFloat(Scanner.java:2496)
at Main.main(Main.java:8)
라는 에러가 뜨며 요리제목 입출력단계에서 에러가 나버렸다.
새로 작성한 코드가 문제인가 싶어 고민하다가 정답코드로 다시 입력해보았는데도 동일한 에러가 나왔다.
-> 해결
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String title = sc.nextLine();
float rate = sc.nextFloat(); // Float 실수는 nextFloat() 메서드로 받습니다.
String input1 = sc.nextLine();
String input2 = sc.nextLine();
String input3 = sc.nextLine();
String input4 = sc.nextLine();
String input5 = sc.nextLine();
String input6 = sc.nextLine();
String input7 = sc.nextLine();
String input8 = sc.nextLine();
String input9 = sc.nextLine();
String input10 = sc.nextLine();
System.out.println("[ " + title + " ]");
int intRate = (int)rate;
double perRate = 100 * intRate / 5;
System.out.print(intRate);
System.out.println(" (" + perRate + "%)");
System.out.println("1. " + input1);
System.out.println("2. " + input2);
System.out.println("3. " + input3);
System.out.println("4. " + input4);
System.out.println("5. " + input5);
System.out.println("6. " + input6);
System.out.println("7. " + input7);
System.out.println("8. " + input8);
System.out.println("9. " + input9);
System.out.println("10. " + input10);
}
}
위의 에러가 났던 이유는 next()라고만 썻던걸 nextline()이라고 고쳐서 해결했음.
입력
알리오 올리오
3.8
불을 올리고
저또 어쩌구
저쩌구
이런
저런
요롷게
저렇게
뜨겁게
맛있게
출력
[ 알리오 올리오 ]
3 (60.0%)
1.
2. 불을 올리고
3. 저또 어쩌구
4. 저쩌구
5. 이런
6. 저런
7. 요롷게
8. 저렇게
9. 뜨겁게
10. 맛있게
출력 상태를 보면 자꾸 1. 이 비고 9번째 레시피 입력에서 끝나고 바로 출력으로 넘어가 9번째가 10번째가 되서 출력이 됐다.
질문하고 수정해야겠음.
-> 재 수정 !!
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String title = sc.nextLine();
float rate = sc.nextFloat(); // Float 실수는 nextFloat() 메서드로 받습니다.
String errorCut = sc.nextLine();
String input1 = sc.nextLine();
String input2 = sc.nextLine();
String input3 = sc.nextLine();
String input4 = sc.nextLine();
String input5 = sc.nextLine();
String input6 = sc.nextLine();
String input7 = sc.nextLine();
String input8 = sc.nextLine();
String input9 = sc.nextLine();
String input10 = sc.nextLine();
System.out.println("[ " + title + " ]");
int intRate = (int)rate;
double perRate = 100 * intRate / 5;
System.out.println(intRate + " (" + perRate + "%)");
System.out.println("1. " + input1);
System.out.println("2. " + input2);
System.out.println("3. " + input3);
System.out.println("4. " + input4);
System.out.println("5. " + input5);
System.out.println("6. " + input6);
System.out.println("7. " + input7);
System.out.println("8. " + input8);
System.out.println("9. " + input9);
System.out.println("10. " + input10);
}
}
입력
알리오 올리오
3.8
1
2
3
4
5
6
7
8
9
10
출력
[ 알리오 올리오 ]
3 (60.0%)
1. 1
2. 2
3. 3
4. 4
5. 5
6. 6
7. 7
8. 8
9. 9
10. 10
입 출력을 해보면 정상적으로 번호가 밀리지 않고 잘 매겨서 나온다!
매니저님께 답변을 들어서 수정했는데, 방법은
nextFloat(); 다음 코드로 바로 nextLine(); 이 오면 씹히는 문제가 Scanner의 고질적인 문제라 하셨다.
그래서 임의로 errorCut 이라는 변수를 (실제로 실행되지는 않음) 넣어 nextLine();을 넣고 씹힘 현상을 상쇄했다.
'Experience > 항해99 18기' 카테고리의 다른 글
TIL #1 (2) | 2023.12.12 |
---|---|
WIL 0주차 회고록 (0) | 2023.12.10 |
TIL - 웹미니프로젝트 1일차 회고 (작성중) (0) | 2023.12.06 |
Java 문법 2주차 숙제 (1) | 2023.11.23 |
WIL회고록 01 - Java 문법 1주차 (2) | 2023.11.21 |