본문 바로가기
Development/JAVA

[JAVA입문] Scanner 클래스의 사용법

by eoieiie 2024. 3. 22.

들어가며


 

파이썬에서 input()으로 깔짝대다가 자바로 넘어온 당신들은 갑자기 다음과 같은 알록달록한 코드와 마주하게 된다 :

 

import java.util.Scanner;

public class ScannerExample {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("정수를 입력하세요: ");
        int number = scanner.nextInt();
        System.out.println("입력한 정수: " + number);
        scanner.close();
    }
}

 

원래는 이렇게

 

number = int(input("정수를 입력하세요: "))
print("입력한 정수:", number)

간단한 것을... 그래서 나는 파이썬이 좋다. 커피랑 뱀이랑 싸우면 당연히 뱀이 이기ㅈ

 

[JAVA입문] 은 현재 본인이 재학 중인 ICT융합학부의 2학년 전공필수 과목인 "자바프로그래밍 입문"의 과제 예제들을 토대로 자주 사용되는 기초 문법들을 포스팅하고, 이해하는 것을 목표로 한다. 백준 포스팅과 비슷하게 공부한 내용과 깨달은 것들을 적어보고자 한다.  

 

Scanner클래스


"Scanner" 클래스는 Java에서 사용자 입력을 읽어오는 데 사용된다. 클래스를 사용하기 위해서는 먼저 해당 클래스의 객체를 생성해야 한다.

 

ClassName objectName = new ClassName();

ClassName은 생성하려는 객체의 클래스 이름이고, objectName은 새로 생성된 객체를 참조하기 위한 변수이다. 

객체의 생성은 new를 사용한다. Scanner클래스의 객체 생성은 대부분 다음과 같다:

 

Scanner scanner = new Scanner(System.in);

여기서 System.in은 프로그램에 입력 데이터를 제공하기 위한 표준 입력 장치이다. 

 

이제 객체를 생성했으니, 사용법에 대해서 알아보자. 

Scanner은 파이썬의 input()과는 다르게, 원하는 자료형에 따라 적절한 메서드를 호출해야 한다. 

 

// 사용자로부터 정수 입력 받기
System.out.print("정수를 입력하세요: ");
int number = scanner.nextInt();

// 사용자로부터 문자열 입력 받기
String name = scanner.next();

사용이 끝난 후에는 Scanner객체를 닫아 메모리의 누수를 방지한다. 선택잭이지만 권장되는 작업으로 방법은 아래와 같다.

 

scanner.close();

이제 바로 예제들로 넘어가 보자. 

 

WonToDolar.java


문제

Scanner 클래스를 이용하여 원화를 입력받아 달러로 바꾸어 다음 예시와 같이 출력하는 프로그램을 작성하라.

$1=1100원으로 가정하고 계산한다.

실행 예시

원화를 입력하세요(단위: 원): 3300

3300원은 $3.0입니다.

정답코드


package java_programming_basic.b2;
import java.util.Scanner;

public class wontodolar {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);

        System.out.println("가격을 입력");
        int won = scanner.nextInt();
        double dolar = (double)won / 1100;

        System.out.println(dolar);

        scanner.close();
    }
}

풀이

특별한 건 없다. 다만 나눗셈의 결과가 실수형이므로, dolar은 double로 형을 지정해 주고, 계산할 won 역시 double형으로 형변환하여 계산해 준다. 

IsItSame.java


문제

Scanner 클래스를 이용하여 2자리의 정수(10~99)를 입력받고, 십의 자리와 일의 자리가 같은지 판별하여 출력하는 프로그램을 작성하라.

실행 예시

2 자릿수 정수를 입력하세요(10~99) >>>>>>> 77

Yes! 10의 자리와 1의 자리가 같습니다.

정답코드

package java_programming_basic.b2;
import java.util.Scanner;

public class isitsame {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("2자리의 정수를 입력하세요 (10~99): ");
        int number = scanner.nextInt();

        // 입력된 수의 십의 자리와 일의 자리를 분리
        int tensDigit = number / 10;
        int unitsDigit = number % 10;

        // 십의 자리와 일의 자리가 같은지 판별하여 출력
        if (tensDigit == unitsDigit) {
            System.out.println("입력한 수의 십의 자리와 일의 자리가 같습니다.");
        } 
        else {
            System.out.println("입력한 수의 십의 자리와 일의 자리가 다릅니다.");
        }
        
        scanner.close();
    }
}

풀이

사실 파이썬에 익숙한 나는 인덱싱으로 풀려고 했었다. 자바에서 인덱싱을 사용하여 십의 자리와 일의 자리를 추출하는 방법은 다음과 같다:

String numberString = Integer.toString(number);
char tensDigit = numberString.charAt(0);
char unitsDigit = numberString.charAt(1);
  • Integer.toString() 메서드는 정수를 문자열로 변환
  • charAt() 메서드는 문자열에서 특정 위치에 있는 문자를 가져옴

 

FindMiddle.java


문제

Scanner 클래스로 정수 3개를 입력받고 3개의 숫자 중 중간 크기의 수를 출력하는 프로그램을 작성하라. (평균값을 구하는 것이이 아닙니다.) 

실행 예시

정수 3개를 입력하세요 >>>>>> 20 100 33

중간 값은 33

정답코드

package java_programming_basic.b2;
import java.util.Scanner;

public class findmiddle {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("정수 3개를 입력하세요 (예: 20 100 33): ");
        int num1 = scanner.nextInt();
        int num2 = scanner.nextInt();
        int num3 = scanner.nextInt();

        int middleNumber;

        if ((num1 <= num2 && num1 >= num3) || (num1 >= num2 && num1 <= num3)){
            middleNumber = num1;
        }
        else if ((num2 <= num1 && num2 >= num3) || (num2 >= num1 && num2 <= num3)){
            middleNumber = num2;
        }
        else {
            middleNumber = num3;
        }

        System.out.println("중간 값은 " + middleNumber);

        scanner.close();
    }
}


풀이

파이썬에서는 map함수를 사용하여 공백에서 요소들을 분리하여 입력을 받았었지만 Java의 Scanner클래스는 공백을 구분자로 사용하여 입력을 처리하므로 그런 거 걱정하지 말고 그냥 입력받으면 된다.

 

CanWeMakeTriangle.java


문제

Scanner를 이용하여 삼각형의 변의 길이를 나타내는 정수를 3개 입력받고 이 3개의 수로 삼각형을 만들 수 있는지 판별하라. (삼각형이 되려면 두 변의 합이 다른 한 변보다 커야 합니다.)

실행 예시

정수 3개를 입력하세요 >>>>>>> 4 3 5

삼각형이 됩니다.

정답코드

package java_programming_basic.b2;
import java.util.Scanner;

public class CanWeMakeTriangle {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);

        System.out.print("정수 3개를 입력하세요: ");
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = scanner.nextInt();

        if (a + b > c){
            System.out.println("삼각형이 됩니다");
        }
        else if (a + c > b){
            System.out.println("삼각형이 됩니다");
        }
        else if (b + c > a){
            System.out.println("삼각형이 됩니다");
        }
        else{
            System.out.println("삼각형이 되지 않습니다");
        }
        scanner.close();
    }
}

 

FindSeason.jav

 


문제

숫자를 입력받아 3~5는 봄, 6~8은 여름, 9~11은 가을, 12, 1, 2의 경우 겨울을 그 외 숫자는 잘못입력하였다고 출력하는 프로그램을 작성하라. (switch문을 이용하세요.)

실행 예시

달을 입력하세요(1~12) >>>>>> 9

가을입니다.

정답코드

package java_programming_basic.b2;
import java.util.Scanner;

public class FindSeason {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);

        System.out.println("달을 입력하세요(1 ~ 12)");
        int month = scanner.nextInt();


        switch(month){
            case 3, 4, 5:
                System.out.println("봄");
                break;
                
            case 6, 7, 8:
                System.out.println("여름");
                break;

            case 9, 10, 11:
                System.out.println("가을");
                break;

            case 12, 1, 2:
                System.out.println("겨울");
                break;

            default:
                System.out.println("유효한 수 입력");
                break;
        }
        scanner.close();
    }
}

 

풀이

switch문의 사용법은 다음과 같다:

 

switch (expression) {
  case value1:
    // 코드 실행
    break;
  case value2:
    // 코드 실행
    break;
  // 추가적인 case 문들
  default:
    // expression과 일치하는 것이 없을 때 실행될 코드
}

break 문이 없으면 해당 case가 실행된 후에도 switch 문을 빠져나가지 않고, 이어지는 case들이 실행될 수 있다. 

 

댓글