1. 다음을 사용하여 콘솔에서 읽기System.in

이전 수업에서는 화면에 정보를 표시하는 명령에 대해 배웠습니다. 이를 위해 우리는 System.out개체와 그 print()메서드 를 사용했습니다 println(). 간단하고 편리합니다.

그러나 이미 짐작하셨겠지만 화면에 정보를 표시하는 것만으로는 충분하지 않습니다. 대부분의 프로그램의 목적은 사용자에게 유용한 작업을 수행하는 것입니다. 즉, 사용자가 키보드에서 데이터를 입력할 수 있어야 하는 경우가 매우 많습니다.

출력의 경우와 마찬가지로 데이터 입력을 위한 특수 개체도 있습니다 System.in. 그러나 불행히도 우리에게는 원하는만큼 편리하지 않습니다. 한 번에 한 문자씩 키보드에서 데이터를 읽을 수 있습니다 .

이를 개선하기 위해 System.in개체와 쌍을 이룰 때 필요한 모든 것을 제공하는 다른 클래스를 사용할 것입니다. 오랫동안 Java에는 모든 경우에 적합한 클래스가 있었습니다. 그리고 우리는 지금 그들 중 하나를 알게 될 것입니다.


2. Scanner클래스

클래스 Scanner(전체 이름: java.util.Scanner)는 콘솔, 파일 및 인터넷과 같은 다양한 소스에서 데이터를 읽을 수 있습니다. 키보드에서 데이터를 읽으려면 System.in개체를 데이터 소스로 사용할 인수로 전달해야 합니다. 그런 다음 스캐너 개체는 이를 사용하여 수행할 작업을 알아냅니다.

개체를 사용하여 키보드에서 읽는 것은 Scanner다음과 같습니다.

암호 설명
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
우리는 Scanner객체를 생성합니다. 키보드에서 한 줄의 텍스트를
읽습니다 . 키보드에서 숫자를 읽습니다 .

쉬워보이지만 정말 간단하죠?

질문이 많으실 것 같은데 이제 답변을 드리겠습니다.

하지만 먼저 클래스를 사용하는 완전한 프로그램의 예를 보여드리겠습니다 Scanner.

import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      Scanner console = new Scanner(System.in);
      String name = console.nextLine();
      int age = console.nextInt();

      System.out.println("Name: " + name);
      System.out.println("Age: " + age);
   }
}

3. Scanner객체 생성

첫 번째 질문은 이 줄이 무엇입니까 Scanner console = new Scanner (System.in);?

이 줄은 혼란스러울 수 있지만 항상 비슷한 내용을 볼 수 있습니다. 그래서 우리는 여기서 무슨 일이 일어나고 있는지 설명하는 것이 중요하다고 생각합니다.

일반적으로 텍스트로 변수를 만드는 방법을 기억하십시오.

String str = "text";
문자열 변수 선언 및 초기화

먼저 변수의 타입( )을 쓰고 String이름( str)을 쓰고 마지막으로 등호 뒤에 값을 씁니다.

우리의 어리둥절한 줄은 실제로 동일합니다.

Scanner console = new Scanner(System.in);
Scanner변수 선언 및 초기화

등호 왼쪽에 있는 모든 항목은 console형식이 인 변수의 선언입니다 Scanner. s 대신 또는 scanner또는 이라고 부를 수 있습니다 keyboard. 그러면 코드는 다음과 같습니다.

Scanner s = new Scanner(System.in);
String name = s.nextLine();
int age = s.nextInt();
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
Scanner keyboard = new Scanner(System.in);
String name = keyboard.nextLine();
int age = keyboard.nextInt();

나는 그것이 모든 것을 훨씬 더 명확하게 만든다고 생각합니다.

그러나 등호 오른쪽에 있는 코드는 조금 더 복잡합니다. 나는 지금 언급하고 있습니다 new Scanner(System.in); 즉, 여기에서도 초자연적인 일이 일어나지 않습니다.

이 코드에서 우리는 Java 머신에게 new유형이 인 새 객체(키워드) 를 생성하고 객체를 새로 생성된 객체의 데이터 소스로 Scanner 전달하도록 지시합니다 .System.inScanner

 이 전체 줄을 실행한 후 프로그램이 키보드에서 데이터를 읽는 데 사용할 Scanner변수를 갖게 됩니다 .console


4. 방법 목록

위의 예에서 Scanner console변수는 개체에 대한 참조를 저장합니다 Scanner.

변수가 참조하는 개체에서 메서드를 호출하려면 변수 이름 다음에 마침표를 쓰고 그 뒤에 메서드 이름과 인수를 씁니다. 명령의 일반적인 모양은 다음과 같습니다.

variable.method(arguments);
변수가 참조하는 개체에서 메서드 호출

예:

System.out.println("Hello");
System.out.println(1);

함수에 인수를 전달할 계획이 없다면 빈 괄호만 작성하면 됩니다.

variable.method();
인수를 전달하지 않고 메서드 호출

예:

System.out.println();

5. 콘솔 입력

개체가 있으면 Scanner키보드에서 데이터를 쉽게 가져올 수 있습니다.

키보드에서 한 줄을 읽으려면 다음 명령이 필요합니다.

String str = console.nextLine();

프로그램 실행이 이 줄에 도달하면 일시 중지하고 사용자가 데이터를 입력하고 Enter 키를 누를 때까지 기다립니다. 그러면 사용자가 입력한 모든 것이 변수에 저장됩니다 str.

키보드에서 숫자를 읽으 려면 다음 명령이 필요합니다.

int number = console.nextInt();

여기 있는 모든 것은 이전 명령과 같습니다. 프로그램 실행이 이 줄에 도달하면 일시 중지하고 사용자가 데이터를 입력하고 Enter 키를 누를 때까지 기다립니다. 그 후 사용자가 입력한 모든 것은 숫자로 변환되어 number변수에 저장됩니다.

사용자가 정수로 변환할 수 없는 데이터를 입력한 경우 프로그램은 오류를 생성하고 종료합니다.

키보드에서 분수를 읽으려면 다음 명령이 필요합니다.

double number = console.nextDouble();

이 문은 메서드가 있는 문과 매우 유사하지만 nextInt()입력된 데이터를 숫자로 변환할 수 있는지 확인합니다 double.

키보드에서 두 개의 숫자를 읽고 합계를 화면에 표시하는 프로그램의 예:

import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      Scanner console = new Scanner(System.in);
      int a = console.nextInt();
      int b = console.nextInt();

      System.out.println(a + b);
   }
}
메모

사용자는 공백으로 구분하여 한 줄에 여러 숫자를 입력할 수 있습니다. 클래스의 메서드는 Scanner이를 처리하는 방법을 알고 있습니다. 즉, 프로그램은 사용자가 를 누른 후에만 숫자를 읽습니다 Enter.



6. Scanner수업 의 기타 방법

그건 그렇고, 위의 방법이 Scanner클래스가 제공해야 하는 전부는 아닙니다. 메서드의 전체 목록은 다음과 같습니다.

방법 설명
nextByte()
데이터를 읽어서 변환byte
nextShort()
데이터를 읽어서 변환short
nextInt()
데이터를 읽어서 변환int
nextLong()
데이터를 읽어서 변환long
nextFloat()
데이터를 읽어서 변환float
nextDouble()
데이터를 읽어서 변환double
nextBoolean()
데이터를 읽어서 변환boolean
next()
하나의 "토큰"을 읽습니다. 토큰은 공백 또는 Enter 키 누름으로 구분됩니다.
nextLine()
전체 줄을 읽습니다.

실제로 가져오지 않고 입력에서 다음 토큰을 확인할 수 있는 메서드도 있습니다(읽는 데 사용할 메서드를 알기 위해).

방법 설명
hasNextByte()
가 있습니까 byte? 입력을 ?로 변환할 수 있습니까 byte?
hasNextShort()
가 있습니까 short? 입력을 ?로 변환할 수 있습니까 short?
hasNextInt()
가 있습니까 int? 입력을 ?로 변환할 수 있습니까 int?
hasNextLong()
가 있습니까 long? 입력을 ?로 변환할 수 있습니까 long?
hasNextFloat()
가 있습니까 float? 입력을 ?로 변환할 수 있습니까 float?
hasNextDouble()
가 있습니까 double? 입력을 ?로 변환할 수 있습니까 double?
hasNextBoolean()
가 있습니까 boolean? 입력을 ?로 변환할 수 있습니까 boolean?
hasNext()
다른 토큰이 있습니까?
hasNextLine()
다른 라인이 있나요?

7. 문자열에서 데이터 읽기

Scanner이전에 클래스가 다양한 소스에서 데이터를 읽을 수 있다고 언급했습니다 . 이러한 소스 중 하나는 텍스트 문자열 입니다 .

다음과 같이 보입니다.

String str = "text";
Scanner scanner = new Scanner(str);

개체를 만들 때 개체 대신 Scanner문자열을 전달합니다 . 이제 개체는 문자열에서 데이터를 읽습니다. 예:strSystem.inscanner

프로그램 코드: 설명:
import java.util.Scanner;
public class Solution {
   public static void main(String[] args)
   {
      String str = "10 20 40 60";
      Scanner scanner = new Scanner(str);
      int a = scanner.nextInt();
      int b = scanner.nextInt();

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




// a == 10; 
// b == 20; 
화면 출력은 다음과 같습니다.30