배운 내용 🏃
개인과제 계산기 만들기를 진행했다
요구사항 1-4
반복문을 사용하여 반복의 종료를 알려주는 “exit” 문자열을 입력하기 전까지
무한으로 계산을 진행할 수 있도록 소스 코드를 수정합니다.
• 반복문을 사용합니다. (e.g. for, while …)
요구사항 힌트
public class App {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
/* 반복문 사용 해서 연산을 반복 */
...
System.out.println("결과: " + result);
System.out.println("더 계산하시겠습니까? (exit 입력 시 종료)");
/* exit을 입력 받으면 반복 종료 */
}
}
구현 코드
public class App {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {//while 문 반복
System.out.print("첫 번째 숫자를 입력하세요: ");
int firstNumber = sc.nextInt();
System.out.print("사칙연산 기호를 입력하세요: ");
char operator = sc.next().charAt(0);
System.out.print("두 번째 숫자를 입력하세요: ");
int secondNumber = sc.nextInt();
int result = 0;
boolean realOperation = true;
switch (operator) {
case '+':
result = firstNumber + secondNumber;
break;
case '-':
result = firstNumber - secondNumber;
break;
case '*':
result = firstNumber * secondNumber;
break;
case '/':
if (secondNumber == 0) {
System.out.println("다시 입력하세요. 나누기에서 두번째 수는 0이 될 수 없습니다.");
realOperation = false; // 나눗셈 실패 시 끝
} else {
result = firstNumber / secondNumber;
}
break;
default:
System.out.println("사칙연산 기호를 다시 입력하세요.");
realOperation = false; // 이상한거 넣을시 끝
}
if (realOperation) {
System.out.println("결과: " + result);
}
// exit 입력시 종료 되신 go or 해 입력시 계속 , 그 외 종료
System.out.println("더 계산하시겠습니까? ('go' 또는 '해'를 입력하면 계속합니다, 그 외는 종료)");
String input = sc.next();
if (!input.equals("go") && !input.equals("해")) {
break;
}
}
sc.close();
}
}
요구사항 1-5
연산 결과 10개를 저장할 수 있는 배열을 선언 및 생성하고 연산의 결과를 저장합니다
• 연산의 결과를 저장할 수 있도록 적합한 타입의 배열을 생성합니다
• 연산의 결과를 비어있는 곳에 저장하기 위해 저장할 때마다 count 합니다
요구사항 힌트
public class App {
public static void main(String[] args) {
/* 연산의 결과를 저장할 수 있도록 적합한 타입의 배열을 생성합니다. */
/* 연산의 결과가 저장된 배열의 마지막 index를 저장하는 변수를 선언 */
Scanner sc = new Scanner(System.in);
...
System.out.println("결과: " + result);
/* 연산의 결과를 배열에 저장합니다. */
/* index를 증가 시킵니다. */
...
}
}
구현코드
public class App {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 배열생성
int[] results = new int[10];
int index = 0; // 초기화
while (true) {
System.out.print("첫 번째 숫자를 입력하세요: ");
int firstNumber = sc.nextInt();
System.out.print("사칙연산 기호를 입력하세요: ");
char operator = sc.next().charAt(0);
System.out.print("두 번째 숫자를 입력하세요: ");
int secondNumber = sc.nextInt();
int result = 0;
boolean realOperation = true;
switch (operator) {
case '+':
result = firstNumber + secondNumber;
break;
case '-':
result = firstNumber - secondNumber;
break;
case '*':
result = firstNumber * secondNumber;
break;
case '/':
if (secondNumber == 0) {
System.out.println("다시 입력하세요. 나누기에서 두번째 수는 0이 될 수 없습니다.");
realOperation = false;
} else {
result = firstNumber / secondNumber;
}
break;
default:
System.out.println("사칙연산 기호를 다시 입력하세요.");
realOperation = false;
System.exit(0);
}
if (realOperation) {
System.out.println("결과: " + result);
// 결과를 배열에 저장
if (index < 10) {
results[index] = result;
index++; // 인덱스 증가
System.out.println("현재 저장된 결과의 수: " + index); //계산할때마다 몇개저장된지 몰라서 넣음
} else {
System.out.println("10개초과");
}
}
// 계산 계속 여부 확인
System.out.println("더 계산하시겠습니까? ('go' 또는 '해'를 입력하면 계속합니다, 그 외는 종료)");
String input = sc.next();
if (!input.equals("go") && !input.equals("해")) {
break;
}
}
// 배열에 저장된 모든 결과 출력
System.out.println("저장된 결과:");
for (int i = 0; i < index; i++) {
System.out.println("결과 " + (i + 1) + ": " + results[i]);
}
sc.close();
}
}
요구사항 1-6
연산 결과가 10개를 초과하는 경우 가장 먼저 저장된 결과를 삭제하고
새로운 연산 결과가 저장될 수 있도록 소스 코드를 수정합니다.
• 현재 저장된 index가 마지막(9)라면 가장 먼저 저장된 결과 값이 삭제 되고
새로운 결과 값이 마지막 index에 저장될 수 있도록 구현합니다
• Hint : 결과 값들이 한칸씩 앞으로 이동되면 되지 않을까?
요구사항 힌트
public class App {
public static void main(String[] args) {
...
System.out.println("결과: " + result);
...
/* 위 요구사항에 맞게 구현 */
...
System.out.println("더 계산하시겠습니까? (exit 입력 시 종료)");
}
}
구현코드
if (realOperation) {
System.out.println("결과: " + result);
if (index < 10) {
results[index] = result;
index++; // 인덱스 증가
} else {
// 한칸씩 이동
for (int i = 1; i < 10; i++) {
results[i - 1] = results[i];
}
results[9] = result;
}
System.out.println("현재 저장된 결과의 수: " + index);
}
System.out.print("현재 저장된 결과의 수: " + index);
System.out.print(" (");
for (int i = 0; i < index; i++) {
System.out.print(results[i] + (i < index - 1 ? ", " : "")); // 옮겨지나 확인
}
System.out.println(")");
// 더 계산 하려면 'go' '해' 입력
/*System.out.println("더 계산하시겠습니까? ('go' 또는 '해'를 입력하면 계속합니다, 그 외는 종료)");
String input = sc.next();
if (!input.equals("go") && !input.equals("해")) {
break;
}
*/
// exit 입력하면 멈추기
System.out.println("계속하시려면 아무 키나 입력하세요 ('exit'를 입력하면 종료합니다)");
String input = sc.next();
if ( input.equalsIgnoreCase("exit") || input.equalsIgnoreCase("ㄷ턋")) {
break;
}
}
// 배열에 저장된 모든 결과 출력
System.out.println("저장된 결과:");
for (int i = 0; i < index; i++) {
System.out.println("결과 " + (i + 1) + ": " + results[i]);
}
sc.close();
}
요구사항 1-7
연산 결과가 10개로 고정되지 않고 무한이 저장될 수 있도록 소스 코드를 수정합니다
• JCF(Java Collection Framework)를 사용합니다. (e.g. List, Set …)
• “remove”라는 문자열을 입력받으면 가장 먼저 저장된 결과가 삭제될 수 있도록 구현합니다.
요구사항 힌트
public class App {
public static void main(String[] args) {
/* 적합한 컬렉션 타입의 변수 선언 */
...
System.out.println("결과: " + result);
/* 배열에서 컬렉션으로 변경됨으로써 변경해야하는 부분 구현 */
System.out.println("가장 먼저 저장된 연산 결과를 삭제하시겠습니까? (remove 입력 시 삭제)");
/* 위 요구사항에 맞게 구현 */
System.out.println("더 계산하시겠습니까? (exit 입력 시 종료)");
}
}
구현코드
// ArrayList 생성
List<Integer> results = new ArrayList<>();
if (realOperation) {
System.out.println("결과: " + result);
results.add(result); // 결과를 리스트에 추가
System.out.println("현재 저장된 결과의 수: " + results.size() + " " + results);
System.out.println("가장 먼저 저장된 연산 결과를 삭제하시겠습니까? (remove 입력 시 삭제)");
String removeCmd = sc.next();
if (removeCmd.equalsIgnoreCase("remove")) {
if (!results.isEmpty()) {
results.remove(0);
System.out.println("첫 번째 결과가 삭제되었습니다.");
} else {
System.out.println("삭제할 결과가 없습니다.");
}
}
}
// 계속 계산할지 묻는 부분
System.out.println("더 계산하시겠습니까? ('exit'를 입력하면 종료합니다)");
String input = sc.next();
if (input.equalsIgnoreCase("exit")) {
break;
}
}
// 저장된 모든 결과 출력
System.out.println("최종 저장된 결과:");
for (int i = 0; i < results.size(); i++) {
System.out.println("결과 " + (i + 1) + ": " + results.get(i));
}
sc.close();
요구사항 1-8
“inquiry”라는 문자열이 입력되면 저장된 연산 결과 전부를 출력합니다
• foreach(향상된 for문)을 활용하여 구현 해봅니다
요구사항 힌트
public class App {
public static void main(String[] args) {
...
System.out.println("가장 먼저 저장된 연산 결과를 삭제하시겠습니까? (remove 입력 시 삭제)");
...
System.out.println("저장된 연산결과를 조회하시겠습니까? (inquiry 입력 시 조회)");
/* 위 요구사항에 맞게 구현 */
System.out.println("더 계산하시겠습니까? (exit 입력 시 종료)");
}
}
구현코드
if (realOperation) {
System.out.println("결과: " + result);
results.add(result);
System.out.println("현재 저장된 결과의 수: " + results.size() + " " + results);
//저장된 결과 , 결과의수 출력 ( 이거는 계속 )
System.out.println("가장 먼저 저장된 연산 결과를 삭제하시겠습니까? (remove 입력 시 삭제)");
String removeCmd = sc.next();
@@ -63,8 +65,20 @@ public static void main(String[] args) {
System.out.println("삭제할 결과가 없습니다.");
}
}
System.out.println("저장된 연산결과를 조회하시겠습니까? (inquiry 입력 시 조회)");
String inquiryLook = sc.next();
if (inquiryLook.equalsIgnoreCase("inquiry")) {
if (!results.isEmpty()) {
System.out.println("저장된 모든 결과:");
for (int res : results) {
System.out.println(res);
}
} else {
System.out.println("저장된 결과가 없습니다.");
}
}
}
System.out.println("더 계산하시겠습니까? ('exit'를 입력하면 종료합니다)");
String input = sc.next();
if (input.equalsIgnoreCase("exit")) {
@@ -73,8 +87,8 @@ public static void main(String[] args) {
}
// 저장된 모든 결과 출력
System.out.println("최종 저장된 결과:");
for (int res : results) {
System.out.println(res);
}
sc.close();
마무리🔥
개인과제에서 계산기를 level1단계를 구현했다 1단계는
어찌저찌했지만 2단계는 많이 애를 먹었다
해설과 튜터님의 피드백을 보며 코드를 바꿔야겠다
'TIL' 카테고리의 다른 글
TIL - 2024/05/10 (0) | 2024.05.10 |
---|---|
TIL - 2024/05/09 (0) | 2024.05.10 |
TIL - 2024/05/07 (0) | 2024.05.07 |
TIL - 2024/05/03 (0) | 2024.05.03 |
TIL - 2024/05/02 (0) | 2024.05.02 |