본문 바로가기

Studying/JAVA

[JAVA]_Scanner(스캐너)

1. Scanner

 

- 지금까지 입력 없이 System.out을 통해 출력했다면, System.in을 통해 사용자의 입력을 받을 수 있음.

- 자바는 System.in을 통해 사용자 입력을 받으려면 여러 과정을 거쳐야 해서 복잡하고 어려움.

- 자바는 이런 문제를 해결하기 위해 Scanner라는 클래스를 제공하며, 사용자 입력을 매우 편리하게 받을 수 있게 함.

 

package scanner;

import java.util.Scanner;

public class Scanner1 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.print("문자열을 입력하세요 : ");
        String str = scanner.nextLine();    // 이볅을 String으로 가져옴.
        System.out.println("입력한 문자열 : " + str);

        System.out.print("정수를 입력하세요 : ");
        int intValue = scanner.nextInt();
        System.out.println("입력한 정수 : " + intValue);

        System.out.print("실수를 입력하세요 : ");
        double doubleValue = scanner.nextDouble();
        System.out.println("입력한 실수 : " + doubleValue);

    }
}

[Scanner1]

 

○ Scanner scanner = new Scanner(System.in);

     - 이 코드는 객체와 클래스를 배워야 정확히 이해 할 수 있는데 후에 배울 것임.

     - 지금은 Scanner의 기능을 사용하기 위해 new를 사용해서 Scanner를 만드는 정도로 이해하자.

     - Scanner는 System.in을 사용해서 사용자의 입력을 편리하게 받도록 도와줌.

     - scanner는 변수를 선언한 것으로, 이 변수를 통해 scanner를 사용할 수 있음.

 

○ 타입

     - scanner.nextLine() : 엔터(\n)를 입력할 때까지 문자를 가져옴.

     - scanner.nextInt() : 입력을 int 형으로 가져옴. 정수 입력에 사용.

     - scanner.nextDouble() : 입력을 double 형으로 가져옴. 실수 입력에 사용.

 

○ 주의 - 타입이 다르면 오류가 발생함 → InputMismatchExcpetion


package scanner;

import java.util.Scanner;

public class Scanner2 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.print("첫 번째 숫자를 입력하세요 : ");
        int num1 = scanner.nextInt();
        System.out.print("두 번째 숫자를 입력하세요 : ");
        int num2 = scanner.nextInt();

        int result = num1 + num2;
        System.out.println("두 수의 합은 : " + num1 + " + " + num2 + " = " + result);
    }
}

[Scanner3]

 

- 사용자로부터 두 수를 입력받고, 그 합을 출력하는 예제.


package scanner;

import java.util.Scanner;

public class Scanner3 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.print("첫 번째 숫자를 입력하세요 : ");
        int num1 = scanner.nextInt();
        System.out.print("두 번째 숫자를 입력하세요 : ");
        int num2 = scanner.nextInt();

        if (num1 > num2) {
            System.out.println("더 큰 숫자는 : " + num1);
        } else if (num1 < num2) {
            System.out.println("더 큰 숫자는 : " + num2);
        } else {
            System.out.println("두 숫자는 같습니다.");
        }
    }
}

[Scanner3]

 

- 사용자로부터 두 개의 정수를 입력 받고, 더 큰 수를 출력하는 프로그램 작성.

- 두 숫자가 같은 경우 두 숫자는 같다고 출력하면 됨.


package scanner;

import java.util.Scanner;

public class ScannerWhile1 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        while(true) {
            System.out.print("문자열을 입력하세요(exit : 종료) : ");
            String str = scanner.nextLine();
            if(str.equals("exit")) {
                System.out.println("프로그램을 종료합ㄴ디ㅏ.");
                break;
            }
            System.out.println("입력한 문자열 : " + str);
        }
    }
}

[ScannerWhile1]

 

- 한 번 실행하면 사용자가 프로그램을 종료할 때까지 반복해서 실행하게 됨.

- 사용자이 입력을 지속해서 받아들이고, 반복해서 동작하는 프로그램 개발하는 것.

 

- 사용자가 입력한 문자열을 그대로 출력하는 예제.

- exit라는 문자가 입력되면 프로그램 종료.

- 프로그램은 반복해서 실행.

 

- while(true) : 중간에 break문을 만나기 전까지 무한 반복.


package scanner;

import java.util.Scanner;

public class ScannerWhile2 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.println("첫 번째 숫자와 두 번째 숫자 모두 0을 입력하면 프로그램 종료.");

        while(true) {
            System.out.print("첫 번째 숫자 입력 : ");
            int num1 = scanner.nextInt();
            System.out.print("두 번째 숫자 입력 : ");
            int num2 = scanner.nextInt();

            if(num1 == 0 && num2 == 0) {
                System.out.println("프로그램 종료");
                break;
            }

            int result = num1 + num2;
            System.out.println("두 수의 합은 : " + result);
        }
    }
}

[ScannerWhile2]

 

- 첫 번째 숫자와 두 번째 숫자를 더해서 출력하는 프로그램 개발.

- 첫 번재 숫자와 두 번째 숫자 모두 0을 입력하면 프로그램 종료.

- 프로그램은 반복해서 실행.


package scanner;

import java.util.Scanner;

public class ScannerWhile3 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        int sum = 0;

        while(true) {
            System.out.print ("숫자 입력(0 입력시 프로그램 종료) : ");
            int number = scanner.nextInt();

            if(number == 0) {
                break;
            }

            sum += number;
        }
        System.out.println("입력한 모든 정수의 합은 : " + sum);
    }
}

[ScannerWhile3]

 

- 사용자 입력을 받아 그 합계를 계산하는 프로그램 개발.

- 사용자는 한 번에 한 개의 정수를 입력할 수 있고, 사용자가 0을 입력하면 프로그램은 종료.

- 이 때, 프로그램이 종료될 때까지 사용자가 입력한 모든 정수의 합을 출력.


1-1. 스캐너 예제

 

[ScannerEx1]

 

- 사용자로부터 입력받은 이름과 나이를 출력.

- 출력 형태는 "당신의 이름은 [이름]이고, 나이는 [나이]살입니다."

 

- 실행 결과 예시

   당신의 이름을 입력하세요 : 자바

   당신의 나이를 입력하세요 : 30

   당신의 이름은 자바이고, 나이는 30살입니다.

package scanner.ex;

import java.util.Scanner;

public class ScannerEx1 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.print("당신의 이름을 입력하세요 : ");
        String name = scanner.nextLine();

        System.out.print("당신이 나이를 입력하세요 : ");
        int age = scanner.nextInt();

        System.out.println("당신의 이름은 " + name + "이고, 나이는 " + age + "살입니다.");
    }
}

[ScannerEx2]

 

- 사용자로부터 하나의 정수를 입력받고, 이 정수가 홀수인지 짝수인지 판별하는 프로그램 작성.

 

- 실행결과 예시

   하나의 정수를 입력하세요 : 1

   입력한 숫자 1은(는) 홀수입니다.

 

   하나의 정수를 입력하세요 : 4

   입력한 숫자 4은(는) 짝수입니다.

package scanner.ex;

import java.util.Scanner;

public class ScannerEx2 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.print("하나의 정수를 입력하세요 : ");
        int number = scanner.nextInt();

        if(number % 2 ==0) {
            System.out.println("입력한 숫자 " + number + "은(는) 짝수 입니다.");
        } else {
            System.out.println("입력한 숫자 " + number + "은(는) 홀수 입니다.");
        }
    }
}

[ScannerEx3]

 

- 사용자로부터 음식의 이름(foodName), 가격(foodPrice), 그리고 수량(foodQuantity)을 입력받아, 주문한 음식의 총 가격을 계산하고 출력하는 프로그램 작성.

- 음식의 총 가격 계산 : 음식의 가격(foodPrice)과 수량(foodQuantity)을 곱한 값이고, 이를 totalPrice라는 이름의 변수에 저장.

- 주문 정보와 총 가격을 출력. 출력 형태는 "[음식 이름] [수량]개를 주문하셨습니다. 총 가격은 [총 가격]원입니다."

 

- 실행 결과 예시

   음식 이름을 입력해주세요 : 피자

   음식의 가격을 입력해주세요 : 20000

   음식의 수량을 입력해주세요 : 2

   피자 2개를 주문하셨습니다. 총 가격은 40000원입니다.

package scanner.ex;

import java.util.Scanner;

public class ScannerEx3 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.print("음식 이름을 입력해주세요 : ");
        String foodName = scanner.nextLine();

        System.out.print("음식의 가격을 입력해주세요 : ");
        int foodPrice = scanner.nextInt();

        System.out.print("음식이 수량을 입력해주세요 : ");
        int foodQuantity = scanner.nextInt();

        int totalPrice = foodPrice * foodQuantity;

        System.out.println(foodName + " " + foodQuantity + "개를 주문하셨습니다. 총 가격은 " + totalPrice + "원입니다.");
    }
}

[ScannerEx4]

 

- 사용자로부터 하나의 정수 n을 입력받고, 입력받은 정수 n의 구구단을 출력하는 프로그램을 작성.

 

- 실행 결과 예시

   구구단의 단 수를 입력해주세요 : 8

   8단의 구구단 :

   8 X 1 = 8

   8 X 2 = 16

   8 X 3 = 24

   ...

   8 X 9 = 72   

package scanner.ex;

import java.util.Scanner;

public class ScannerEx4 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.print("구구단의 단 수를 입력해주세요 : ");
        int n = scanner.nextInt();

        System.out.println(n + "단의 구구단 : ");

        /*for(int i = n; i < 9; i++) {
            for(int j = 1; j < 10; j++) {
                System.out.println(i + " X " + j + " = " + i * j);
            }
        }*/

        for(int i = 1; i <= 9; i++) {
            System.out.println(n + " X " + i + " = " + n * i);
        }
    }
}

주석처리된 게 내가 작성한 거였는데, 번거롭게 저렇게 작성할 필요가 없었음.

이중 for문 사용하지 않고, 출력을 입력받은 정수 n으로 하면 됨.


[ChangeVarEx]

 

- 변수 a = 10이 들어있고, b = 20이 들어있음.

- 변수 a의 값과 변수 b의 값을 서로 바꾸는 프로그램 작성.

 

- 출력 결과

   a = 20

   b = 10

package scanner.ex;

public class ChangeVarEx {
    public static void main(String[] args) {

        int a = 10;
        int b = 20;
        int temp;

        temp = a;
        a = b;
        b = temp;

        System.out.println("a = " + a);
        System.out.println("b = " + b);
    }
}

[ScannerEx5]

 

- 사용자로부터 두 개의 정수 입력받고, 이 두 정수 사이의 모든 정수를 출력하는 프로그램 작성.

- 사용자에게 첫 번째 숫자 입력받고, 변수의 이름은 num1임.

- 사용자에게 두 번째 숫자 입력받고, 변수의 이름은 num2임.

- 만약 첫 번째 숫자 num1이 두 번째 숫자 num2보다 크다면, 두 숫자 교환. (참고 : 교환 위해 임시 변수 사용 고려.)

- num1부터 num2까지의 각 숫자 출력.

- 출력 결과에 유의. 다음 예시와 같이 2, 3, 4, 5처럼 ,로 구분해서 출력

 

- 실행 결과 예시

   첫 번째 숫자를 입력하세요 : 2

   두 번째 숫자를 입력하세요 : 5

   두 숫자 사이의 모든 정수 : 2, 3, 4, 5

 

   첫 번째 숫자를 입력하세요 : 7

   두 번째 숫자를 입력하세요 : 5

   두 숫자 사이의 모든 정수 : 5, 6, 7

package scanner.ex;

import java.util.Scanner;

public class ScannerEx5 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.print("첫 번째 숫자를 입력하세요 : ");
        int num1 = scanner.nextInt();

        System.out.print("두 번째 숫자를 입력하세요 : ");
        int num2 = scanner.nextInt();

        int temp;

        if (num1 > num2) {
            temp = num1;
            num1 = num2;
            num2 = temp;
        }

        System.out.print("두 사이의 모든 정수 : ");
        for(int i = num1; i <= num2; i++) {
            System.out.print(i);
            if(i != num2) {
                System.out.print(", ");
            }
        }
    }
}

[ScannerWhileEx1]

 

- 사용자로부터 이름과 나이를 반복해서 입력받고, 입력받은 이름과 나이를 출력하는 프로그램 작성.

- 사용자가 "종료"를 입력하면 프로그램 종료.

 

- 실행 결과 예시

   이름을 입력하세요 (종료를 입력하면 종료) : 자바

   나이를 입력하세요 : 30

   이름을 입력하세요 (종료를 입력하면 종료) : 하니

   나이를 입력하세요 : 20

   이름을 입력하세요 (종료를 입력하면 종료) : 종료

   프로그램을 종료합니다.

package scanner.ex;

import java.util.Scanner;

public class ScannerWhileEx1 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        while(true) {
            System.out.print("이름을 입력하세요 (종료를 입력하면 종료) : ");
            String name = scanner.nextLine();

            if(name.equals("종료")) {
                System.out.println("프로그램을 종료합니다");
                break;
            }

            System.out.print("나이를 입력하세요 : ");
            int age = scanner.nextInt();

            scanner.nextLine();

            System.out.println("입력한 이름 : " + name + ", 나이 : " + age);
        }
    }
}

나이를 입력받는 문장 다음에 Scanner.nextLine();을 입력해 주는데 숫자 입력 후의 줄 바꿈 처리를 위해 작성한 것.


[ScannerWhileEx2]

 

- 사용자로부터 상품의 가격(price)과 수량(quantity)을 입력받고, 총 비용을 출력하는 프로그램 작성.

- 가격과 수량 입력받은 후 이들의 곱을 출력.

- 출력 형태는 "총 비용 : [곱한 결과]"이어야 함.

- -1을 입력하여 가격 입력 종료.

 

- 실행 결과 예시

   상품의 가격을 입력하세요 (-1을 입력하면 종료) : 1000

   구매하려는 수량을 입력하세요 : 3

   총 비용 : 3000

   상품의 가격을 입력하세요 (-1을 입력하면 종료) : -1

   프로그램을 종료합니다.

package scanner.ex;

import java.util.Scanner;

public class ScannerWhileEx2 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        while(true) {

            System.out.print("상품의 가격을 입력하세요 (-1을 입력하면 종료) : ");
            int price = scanner.nextInt();

            if (price == -1) {
                System.out.println("프로그램을 종료합니다.");
                break;
            }

            System.out.print("구매하려는 수량을 입력하세요 : ");
            int quantity = scanner.nextInt();

            int totalPrice = price * quantity;

            System.out.println("총 비용 : " + totalPrice);
        }
    }
}

ScannerWhileEx3]

 

- 사용자로부터 여러 개의 숫자를 입력받고, 그 숫자들의 합계와 평균을 계산하는 프로그램 작성.

- 사용자는 숫자를 입력하고, 마지막에는 -1을 입력하여 숫자 입력을 종료한다고 가정.

- 모든 숫자의 입력이 끝난 후에는, 숫자들의 합계 sum과 평균 average를 출력. 평균은 소수점 아래까지 계산.

 

- 실행 결과 예시

   숫자를 입력하세요. 입력을 중단하려면 -1을 입력하세요 :

   1

   2

   3

   4

   -1

   입력한 숫자들의 합계 : 10

   입력한 숫자들의 평균 : 2.5

package scanner.ex;

import java.util.Scanner;

public class ScannerWhileEx3 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        int sum = 0;
        int count = 0;
        int number = 0;

        System.out.println("숫자를 입력하세요. 입력을 중단하려면 -1을 입력하세요 : ");
        while(true) {
            number = scanner.nextInt();

            if(number == -1) {
                break;
            }

            sum += number;
            count++;
        }

        double average = (double) sum / count;
        System.out.println("입력한 숫자드의 합계 : " + sum);
        System.out.println("입력한 숫자들의 평균 : " + average);
    }
}

count 변수를 만들어 개수를 세고, 평균을 계산할 때 사용하는 것. 다음에 다시 또 풀어보기.

while 문을 아래처럼 다르게 작성해서 입력할 수 있음.

while((number = scanner.nextInt() != -1)) {
    sum += number;
    count++;
}

[ScannerWhileEx4]

 

- 사용자로부터 상품 정보(상품명, 가격, 수량)를 입력받고, 이들의 총 가격을 출력하는 프로그램 작성,

- 사용자는 여러 상품을 추가하고 결제할 수 있으며, 프로그램을 언제든지 종료할 수 있음.

- 사용자에게 다음 세 가지 옵션을 제공해야 함. 

   1 : 상품 입력, 2 : 결제, 3 : 프로그램 종료. 옵션은 정수로 입력받으며, 옵션을 저장하는 변수 이름은 option이어야 함.

- 상품 입력 옵션을 선택하면, 사용자에게 상품명과 가격, 수량을 입력받음.

- 결제 옵션을 선택하면, 총 비용을 출력하고 총 비용을 0으로 초기화. (사용자가 총 비용을 확인하고, 결제를 완료했다고 가정. 따라서 다음 사용자를 위해 총 비용을 다시 0으로 초기화.)

- 프로그램 종료 옵션을 선택하면, "프로그램을 종료합니다."라는 메시지를 출력하고 프로그램을 종료.

- 위의 세 가지 옵션 외에 다른 값을 입력하면, "올바른 옵션을 선택해주세요,"라는 메시지 출력.

 

- 실행 결과 예시

   1 : 상품 입력, 2 : 결제, 3 : 프로그램 종료

   1

   상품명을 입력하세요 : 스프링

   상품의 가격을 입력하세요 : 30000

   구매 수량을 입력하세요 : 1

   상품명 : 스프링 가격 : 30000 수량 : 1 합계 : 30000

   1 : 상품 입력, 2 : 결제, 3 : 프로그램 종료

   1

   상품명을 입력하세요 : JPA

   상품의 가격을 입력하세요 : 40000

   구매 수량을 입력하세요 : 2

   상품명 : JPA 가격 : 40000 수량 : 2 합계 : 80000

   1 : 상품 입력, 2 : 결제, 3 : 프로그램 종료

   2   총 비용 : 110000 

   1 : 상품 입력, 2 : 결제, 3 : 프로그램 종료

   3

   프로그램을 종료합니다.

package scanner.ex;

import java.util.Scanner;

public class ScannerWhileEx4 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        int totalCost = 0;

        while(true) {
            System.out.println("1 : 상품입력, 2 : 결제, 3 : 프로그램 종료");
            int option = scanner.nextInt();

            if(option == 1) {

                scanner.nextLine();

                System.out.print("상품명을 입력하세요 : ");
                String product = scanner.nextLine();

                System.out.print("상품의 가격을 입력하세요 : ");
                int price = scanner.nextInt();

                System.out.print("구매 수량을 입력하세요 : ");
                int quantity = scanner.nextInt();
                
                int total = price * quantity;
                totalCost += total;

                System.out.println("상품명 : " + product + " 가격 : " + price + " 수량 : " + quantity + " 합계 : " + total);

            } else if (option == 2) {
                System.out.println("총 비용 : " + totalCost);
            } else if (option == 3) {
                System.out.println("프로그램을 종료합니다.");
                break;
            } else {
                System.out.println("올바른 옵션을 선택해주세요.");
            }
        }
    }
}

'Studying > JAVA' 카테고리의 다른 글

[JAVA]_Method(메서드)  (2) 2024.12.14
[JAVA]_Array(배열)  (1) 2024.12.09
[JAVA]_Casting(형변환)  (0) 2024.12.03
[JAVA]_Scope(스코프)  (0) 2024.12.03
[JAVA]_Loop Statement(반복문)  (0) 2024.12.03