250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- optional
- til #데이터베이스 #sql
- 스프링부트
- 깃
- 패키지구조
- springboot
- 도메인별
- 프레임워크
- 스파르타사전캠프
- 내일배움캠프
- 스터디카페
- 레퍼클래스
- 메모리구조
- static
- jvm
- 스파르타코딩클럽 #개발자 #백엔드
- 요시
- 자바
- 계층형
- 깃헙
- Spring
- 스파르타코딩클럽 #사전캠프
- 캡슐화
- Framework
- Java
- 사전캠프
- Til
- 스파르타코딩클럽
- 함바그
- 키오스크
Archives
- Today
- Total
John's Code Journey
[TIL] 계산기 과제 수정 본문
728x90
계산기 과제 피드백을 바탕으로 코드수정을 했다.
튜터님께 이러한 피드백을 받았다.
Lv1 - while문의 조건절에는 true를 주는 것 보다는 해당 while을 종료하기 위한 식을 작성해주거나 boolean 변수로 무한 루프가 발생할 수 있는 부분을 방지해주시는게 중요합니다. - 입력 값이 숫자형이 아닌 경우 Integer.parseInt()로 파싱 시 InputMismatchException이 발생할 수 있습니다. 해당 부분을 try - catch로 예외처리 해보시면 좋겠어요. - “exit”의 경우 전역변수로 선언하여 사용해도 괜찮지만 해당 코드의 경우 static final로 상수처리하여 사용하는게 더 적합하겠어요. - input.equals("exit") 과 같이 동등비교하실 때에는 상수값을 앞에두고 비교하시면 NPE를 방지 할 수 있습니다. “exit”.equals(input)
package calculatorlevel2;
import java.util.Scanner;
public class App {
private static final String exit = "exit";
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Calculator calculator = new Calculator();
boolean flag = true;
while (flag) {
double n1 = 0;
System.out.print("첫 번째 숫자를 입력하세요 (종료하려면 'exit'을 입력하세요): ");
String firstNum = scanner.nextLine();
if (exit.equalsIgnoreCase(firstNum)) {
System.out.println("계산기를 종료합니다.");
break;
}
//예외처리 추가 : 입력 값이 숫자가 아닐 겅우 다시 입력 받기
try {
n1 = Double.parseDouble(firstNum);
} catch(NumberFormatException e) {
System.out.println("잘못된 입력입니다. 숫자를 입력하세요.");
continue; // 다시 반복문으로 돌아가서 입력받기
}
double n2 = 0;
System.out.print("두 번째 숫자를 입력하세요: ");
String secondNum = scanner.nextLine();
if (exit.equalsIgnoreCase(secondNum)) {
System.out.println("계산기를 종료합니다.");
break;
}
try{
n2 = Double.parseDouble(secondNum);
}catch(NumberFormatException e){
System.out.println("잘못된 입력입니다. 숫자를 입력하세요.");
continue; // 다시 반복문으로 돌아가서 입력받기
}
System.out.print("사칙연산 기호를 입력하세요 (+, -, *, /): ");
String op = scanner.nextLine();
if (exit.equalsIgnoreCase(op)) {
System.out.println("계산기를 종료합니다.");
break;
}
// 나누기 연산에서 분모가 0일 경우 다시 입력 받기
while (op.equals("/") && n2 == 0) {
System.out.println("분모는 0일 수 없습니다. 다른 값을 입력해주세요.");
System.out.print("두 번째 숫자를 다시 입력하세요: ");
secondNum = scanner.nextLine();
try {
n2 = Double.parseDouble(secondNum); // 새로운 값을 받음
} catch (NumberFormatException e) {
System.out.println("잘못된 입력입니다. 숫자를 입력해주세요.");
continue; // 다시 반복문으로 돌아가서 입력 받기
}
}
// 연산 수행
double result = calculator.calculate(n1, n2, op);
System.out.println("계산 결과: " + result);
System.out.println(); // 계산 후 공백 한 줄 추가
// 연산 결과 출력
System.out.println("저장된 연산 결과들:");
for (Double res : calculator.getResults()) {
System.out.println(res);
}
// 연산 결과 삭제 (예시로 가장 먼저 저장된 결과를 삭제)
System.out.print("가장 먼저 저장된 연산 결과를 삭제하시겠습니까? (y/n): ");
String deleteChoice = scanner.nextLine();
if (deleteChoice.equalsIgnoreCase("y")) {
calculator.removeFirstResult();
}
}
}
}
'Today I Learned > 스파르타 내일배움캠프' 카테고리의 다른 글
[TIL] 네트워크 (0) | 2025.03.18 |
---|---|
[TIL] 키오스크 과제 (0) | 2025.03.13 |
[TIL] JAVA 컬렉션 프레임워크 (1) | 2025.03.10 |
[TIL] 250305 계산기 과제 리뷰 (1) | 2025.03.05 |
[TIL] 예외처리(Exception) (0) | 2025.02.26 |