연산 결과를 저장하는 배열의 크기를 10으로 정했을때, 10번의 연산 후 나오는 결과를 저장하기 위해 가장 먼저 저장됐던 결과를 삭제하고 새로운 값을 마지막에 저장하는 부분을 구현했다.
이번에 계산기를 java로 구현해 보면서 해당 기능에서 시간이 많이 걸렸다.
public class App {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] intArray; //배열 생성
intArray = new int[10]; // 배열 크기 지정
int count = 0; //카운트 세기위한 index
for(int i = 0 ; i < intArray.length ; i++) { //결과값을 배열에 넣기위해 while에서 for문으로 바꿈
System.out.print("첫 번째 숫자를 입력하세요: ");
int num1 = sc.nextInt(); //입력된 숫자를 저장하기 위한 nextInt
System.out.print("사칙연산 기호를 입력하세요: ");
char operator = sc.next().charAt(0); //사칙연산 기호를 넣기 위한 메소드
// charAt 매개변수로 char 타입으로 변환 하고자하는 문자열의 위치를 받는다
System.out.print("두 번째 숫자를 입력하세요: ");
int num2 = sc.nextInt();
int result = 0;
switch (operator) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
// 나눗셈 연산에서 분모가 0일 경우를 위한 if 문
if (num2 == 0) {
System.out.println("나눗셈 연산에서 분모에 0이 입력될 수 없습니다.");
} else {
result = num1 / num2;
}
break;
default:
System.out.println("사칙 연산외에 다른 기호가 들어갈 수 없습니다.");
//사칙연산의 switch인데 다른문자가 들어 갔을 경우를 위해 작성
}
count++; //반복될때마다 count 수 늘리기 위함
System.out.println("결과: " + result);
System.out.println(count + "번 계산하였습니다."); //while이 돌아간 수를 세기 위함
intArray[i] = result; //연산 결과 저장
System.out.println("더 계산하시겠습니까? (exit 입력 시 종료)");
String text = sc.next(); //계산종료 확인을 위한 텍스트 입력 구간
if (text.equals("exit")) {
break; // 강의 2주차 숙제를 통해 특정 문자를 사용했을때 종료되는 법 배움
}
}
System.out.println(Arrays.toString(intArray)); //계산종료후 배열 출력을 위한 코드
}
}
위와 같이 구현 했는데 전까지 배열 array를 이용하여 구현하였고 여기에 조금 추가해서 위의 미션을 해결하고 싶었으나
많은 시간 고민해도 비슷하게까지는 되는데, 왼쪽 부터 결과값이 쌓이다가 10개 이후로는 1번째 자리를 삭제하고 나머지값이 한칸씩 왼쪽으로 밀리고 끝에 최근 결과값이 저장되는것이 안됐다.
for, if 여러가지 조건에서 써보면서 해도 비슷하게는 되는데 방향이 다르거나 지워지는게 다르거나 일정 숫자이후 작동을 하지않았다. 그래서 결국 컬랙션에 Queue를 사용하여 문제를 해결 하였다.
import java.util.Queue;
public class App {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Queue<Integer> intQueue = new LinkedList<>(); //앞선 결과를 삭제하고 새로운 연산결과를 저장하기위한 컬랙션
int count = 0; //카운트 세기위한 index
if (count > 9) {
intQueue.poll();
intQueue.add(result); //10개 쌓인 후 앞에 지우고 값넣기 위한 식
} else {
intQueue.add(result); //10개전까진 그대로 쌓이게 만듬
}
count++;
Queue를 사용하여 10번째가 쌓이면 poll을 통해 가장먼저 기록된 값을 빼주고 다시 저장해주었다.
그후에 다시 배열을 사용해서 하는법 없을까 싶어 계속 고민하고 시도한 끝에 내가 온전히 완성시키진 못했지만
지인의 도움을 받아 완성 시켰다.
if (count >= 10) {
for (int i = 1; i <= 9; i++) {
arr[i - 1] = arr[i];
}arr[9] = result;
} else {
arr[count] = result;
}
count++;
위 코드로 10번 이상부터는 배열의 값들을 한칸씩 앞으로 보내주고 마지막 공간에 결과값을 넣어주는 코드를 완성했다.
queue 사용하기전에 고민했을때 이와비슷하게 했었는데 그때는 arr[i-1] = arr[i]; 의 순서가 달라서 결과가 다르게 나왔던것 같다.
'java 배우기 > TIL' 카테고리의 다른 글
| java) this , this() (0) | 2024.07.26 |
|---|---|
| Java Arrays.sort 사용 (0) | 2024.07.25 |
| java next(), nextLine() 차이 (3) | 2024.07.23 |
| intellij 줄 맞추기 및 줄 바꾸기 (1) | 2024.07.23 |
| java 기초 강의 (2) | 2024.07.22 |