20240729 개인 과제 Lv1 코드 작성
package calculator;
import java.util.ArrayList;
import java.util.Scanner;
public class App {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Scanner sc = new Scanner (System.in);
Scanner 라는 클래스 안에 있는 메소드를 사용한다. (예 : next( ), nextLine( ), nextInt( ) ... )
그런데 매번 입력할 때마다 이렇게 new Scanner(System.in) 이라는 긴 내용을 써주는 것이 번거롭기 때문에,
Scanner 의 객체를 하나 생성해두고 이를 이용하는 방식을 택한다.
Scanner sc = new Scanner(System.in);
String name = sc.next( );
next( ) 메소드는 공백 또는 엔터를 구분점으로 판단하고 분리하여 입력을 받습니다.
nextLine( ) 메소드 Enter 를 치기 전까지 쓴 문자열을 모두 Return 한다.
String input = "";
변수 input (문자열)를 선언 및 생성
ArrayList<Integer> intList = new ArrayList<>();
참조형 변수(변수형) 으로 이루어진 ArrayList 컬렉션을 사용하는 intList 라는 배열을 선언 및 생성
ArrayList<int[]> intList = new ArrayList<>();
Integer 이 아닌, int[ ] 를 사용하면, intList 라는 배열이 참조형 변수(정수형) 이 아닌 배열로 이루어지게 된다.
for (; !input.equals("exit"); ) {
System.out.println("첫 번째 숫자를 입력하세요: ");
// Scanner 를 사용하여 양의 정수를 입력받고 적합한 타입의 변수에 저장한다.
int num1 = sc.nextInt();
System.out.println("두 번째 숫자를 입력하세요: ");
// Scanner 를 사용하여 양의 정수를 입력받고 적합한 타입의 변수에 저장한다.
int num2 = sc.nextInt();
// 사칙 연산 기호를 적합한 타입으로 선언한 변수에 저장한다. (charAt(0))
System.out.println("사칙 연산 기호를 입력하세요: ");
char operator = sc.next().charAt(0);
int result = 0;
// 제어문을 활용하여 위 요구사항을 만족할 수 있게 구현한다.
if (operator == '+') {
result = num1 + num2;
System.out.println(" 결과 : " + result);
} else if (operator == '-') {
result = num1 - num2;
System.out.println(" 결과 : " + result);
} else if (operator == '*') {
result = num1 * num2;
System.out.println(" 결과 : " + result);
} else if (operator == '/') {
if (num2 == 0) {
System.out.println("분모에 0이 들어갈 수 없습니다.");
} else {
result = num1 / num2;
System.out.println(" 결과 : " + result);
}
} else if (operator == '%') {
if (num2 == 0) {
System.out.println("분모에 0이 들어갈 수 없습니다.");
} else {
result = num1 % num2;
System.out.println(" 결과 : " + result);
}
} else {
System.out.println("다시 입력해주세요.");
continue;
}
반복문 (for 문) 사용
for 문 = for ( 조건 ) { 연산 }
(조건) = ( 초기값 ; 조건문 ; 증가연산 )
조건문만 쓰고 싶으면 ( ; 조건문 ; )
( ; !input.equals("exit"); ) = input 에 "exit" 가 입력되지 않는 다면, { 연산 } 을 수행한다.
조건문에서 초기값과 증가 연산이 없는데, ; 를 빼먹지 말고 쓰자
int num1 = sc.nextInt( );
다음 입력되는 정수형 변수를 num1 에 대입
char operator = sc.next( ).charAt(0);
next( ) 를 통해 문자열을 입력받고, charAt(0) 를 통해 첫번째로 입력되는 문자를 Return 하여
operator (문자형 변수) 에 대입한다.
else if( 조건 ) { 연산 } 에서
{연산} 안에 if 문을 넣어서 분모에 0이 들어가는 경우를 처리한다.
else { 연산 } 에서는 입력값이 잘못 되었을 때,
"다시 입력해주세요. " 라는 메세지를 출력하고,
continue 를 사용해서 해당 순서를 pass 한다.
intList.add(result);
변수 result (결과 값) 을 intList 컬렉션에 추가한다.
intList.add(new int[]{num1, num2, operator, result});
결과로 나온 {입력한 값들과 연산기호, 결과 값} 의 배열을 intList 에 추가한다.
sc.nextLine();
버퍼 비우기
System.out.println("가장 먼저 저장된 연산 결과를 삭제하시겠습니까? (remove 입력 시 삭제)");
input = sc.nextLine();
if (input.equals("remove")) {
if (!intList.isEmpty()) {
intList.remove(0);
System.out.println("가장 먼저 저장된 값이 삭제됨.");
} else {
System.out.println("삭제할 값이 없습니다.");
}
}
intList 컬렉션에서 ArrayList 의 기능인 remove 를 사용하여 맨 처음 저장된 값 (0번쨰) 를 삭제한다.
// inquiry 입력시 조회
System.out.println("저장된 연산결과를 조회하시겠습니까? (inquiry 입력 시 조회)");
input = sc.nextLine();
if (input.equals("inquiry")) {
// for 문 = for ( 변수타입 변수명 : 배열 ) { 연산 }
for (int res : intList) {
System.out.println(res);
}
}
향상된 for 문 = for (변수타입 변수명 : 배열) { 연산 }
향상된 for 문을 사용하여 intList 컬렉션의 결과값들을 조회한다.
System.out.println("저장된 연산결과를 조회하시겠습니까? (inquiry 입력 시 조회)");
input = sc.nextLine();
if (input.equals("inquiry")) {
// for 문 = for ( 변수타입 변수명 : 배열 ) { 연산 }
for (int[] res : intList) {
System.out.println(res[0] + " " + (char)res[2] + " " + res[1] + " = " + res[3]);
}
}
향상된 for 문 에서
변수를 배열 int[ ]로 지정하고, 배열명을 res 로 선언
res[0] = num1, res[1] = operator, res[2] = num2, res[3] = result
res[2] 는 문자형 변수 이기 때문에 (char)res[2] 로 나타내서 형변환을 해줌
System.out.println("더 계산하시겠습니까? (exit 입력 시 종료) ");
input = sc.nextLine();
}
// 프로그램 종료 시 Scanner 닫기 // 챗지피티가 닫아라고함.
sc.close();
}
}
input = sc.nextLine( );
줄바꿈 이전의 값을 return 하고, input 에 입력
exit 가 아니라면, 다시 for 문을 반복한다.
sc.close( );
프로그램 종료 시 Scanner 닫기 (챗지피티한테 물어보니 닫아라고 함)