카테고리 없음

20240729 개인 과제 Lv1 코드 작성

ddh1713 2024. 7. 29. 14:29

 

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 닫기 (챗지피티한테 물어보니 닫아라고 함)