저번주 부터 시작된 개인과제를 이제야 시작해보려고 한다.
왜냐하면 level 2 부터 직면한 클래스부터 예외처리 부분이 강의를 들어도 도저히 와닿지 않았기 때문.
그래서 하루에 1주차씩 들어야했던 강의를 지난하게 끌어서 듣고 들었다.
아직도 이해가 안되긴 하지만 어쨌든 하기는 해야하니까.
드디어 만들어보는 과제.package 벌써부터 이렇게 하는게 맞나 의문이다. 프로젝트를 새로 파는건 아닌지, 이거 깃연동은 어떻게 하는지, 일단 고민에 침몰하기 전 시작부터 해보자.
어쨌든 만들었다. 새하얀 도화지를 보니까 두근두근 거리기도 하는데 한 편으로는 망망대해를 마주한것 처럼 막막한 마음도 있다.
Scanner를 이용한 아주 쉬운 입력문을 만들어보자.
import java.util.Scanner;
scanner를 갖다 쓸수 있게 import하고,
public class App {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("첫 번째 숫자를 입력하세요: ");
int firstNumber = sc.nextInt();
System.out.print("두 번째 숫자를 입력하세요: ");
int secondNumber = sc.nextInt();
}
그냥 적당히 변수이름에 정수형으로 선언해서 입력받기.
와 너무 쉽다!
마찬가지로 scanner를 이용해 +, -, *, / 를 입력받자.
System.out.print("사칙연산 기호를 입력하세요: ");
String operator = sc.nextLine();
중간 지점인 지금. 잘 입력받고 있는지 확인하기 위해서 변수들을 출력해보자.
System.out.println("첫 번째 입력 값: " + firstNumber);
System.out.println("두 번째 입력 값: " + operator);
System.out.println("세 번째 입력 값: " + secondNumber);
내가 이럴줄 알았다. 하여간 한번에 되는게 하나도 없다. 전에 다뤘던 입력시 엔터키로 인한 줄바꿈 때문에 두번째 입력이 곧바로 넘어가는 것 같다. 그래서 입력을 한 줄 추가.
System.out.println("첫 번째 숫자를 입력하세요: ");
int firstNumber = sc.nextInt();
sc.nextLine(); //추가됨.
고비를 넘겼다. 아주 위험했다.
입력된 연산자에 따라 조건을 나눠 연산을 하고, 결과값을 출력하는 것 까지.
int result = 0;
switch (operator) {
case "+" : result = firstNumber + secondNumber;
break;
case "-" : result = firstNumber - secondNumber;
break;
case "*" : result = firstNumber * secondNumber;
break;
case "/" :
if(secondNumber != 0) {
result = firstNumber / secondNumber;
} else {
System.out.println("0으로 나눌수 없습니다.");
result = -1;
}
break;
}
System.out.println("결과: " + result);
아주 깔끔한 결과.
boolean flag = true;
while (flag) {
...상위 코드...
System.out.println("더 계산하시겠습니까? (exit 입력 시 종료)");
if (sc.nextLine().equals("exit")) {
flag = false;
} // 루프 탈출
}
배열을 선언하면서 while문 속에서 인덱스역할을 할 변수도 선언.
int[] resultArray = new int[10];
int i = 0;
while(flag) {
...
i++;
resultArray[i] = result;
}
...
i++;
if (i == resultArray.length) {
for (int j = 0; j < resultArray.length - 2; j++) {
resultArray[j] = resultArray[j + 1];
} // 값을 앞으로 한칸씩 이동, 마지막 [9] 위치는 if문 바깥에.
}
resultArray[i] = result; // 여기
...
값 삭제시, 먼저 들어가 있던 값을 내보내면서 저장하는 건, 자료구조 중 큐(Queue)의 형태다.
import java.util.LinkedList;
import java.util.Queue;
Queue를 활용하기 위한 패키지 import,
Queue<Integer> numQ = new LinkedList<Integer>();
Queue 선언. <>에 자료형을 넣지 않으면 값의 자료형에 구애받지 않는다.
numQ.add(result);
...
System.out.println("가장 먼저 저장된 연산 결과를 삭제하시겠습니까? (remove 입력 시 삭제)");
if(sc.nextLine().equals("remove")) {
numQ.remove();
}
Queue에 내장된 remove() 메소드 하나면 선입선출 가능.
System.out.println("저장된 연산결과를 조회하시겠습니까? (inquiry 입력 시 조회)");
if(sc.nextLine().equals("inquiry")) {
for (int num : numQ) {
System.out.println(num);
}
}
여기까지가, level 1의 구현이었다. level 2 부터 시작되는 클래스는 나에게 어떤 고통을 안겨줄지 기대된다. 내일 TIL을 쓸수 있을까? 나는 살아남을 수 있을까?