[JAVA]スキャンプログラムクラス


1.Scannerクラスの使用


画面から値を取得する場合はjavaを使用します.utilパッケージのScannerクラスを使用する必要があります.
import java.util.Scanner;
上記の文は直接入力できますが、eclipseは自動補完機能を提供しているので、Scannerを入力してctrl+spaceを押すだけで自動的にインポートされます.

システムは、次に作成されるスキャンオブジェクトのパラメータとして使用されます.inを与えると入力値を受信でき、受信できる入力値のデータ型は以下のようになります.
Scanner sc = new Scanner(System.in);
public class exam {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("문자열 입력 : ");
		String str = sc.nextLine();
		System.out.println(str);
		
		System.out.print("정수 입력 : ");
		int i = sc.nextInt();
		System.out.println(i);
		
		System.out.print("실수 입력 : ");
		double j = sc.nextDouble();
		System.out.println();
	}
}

上記の例では、nextLine()、nextInt()およびnextDouble()メソッドを入力し、各メソッドが対応するデータ型を読み出していることを示します.ここでString入力を受け入れる方法にはnextLine()とnext()がありますが、なぜ同じタイプを受け入れるには異なる方法が必要なのでしょうか.

2.next()メソッドとnextLine()メソッドの違い

public class exam {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("nextLine() 메서드 : ");
		String str1 = sc.nextLine();
		System.out.println(str1);
		
		System.out.print("next() 메서드 : ");
		String str2 = sc.next();
		System.out.println(str2);
	}
}

同じ文を入力しましたが、next()こんにちは!ここまで読んだだけで
したがって、2つの方法の違いは、next()が文字列のスペースを入力する前に/nextLine()を返し、スペースを考慮しないことです.
では、スペースのない短い文字列を受信する場合はnext()を使用しないで、スペースが必要な長い文字列を受信する場合はnextLine()を使用しますか?

そうすべきでない理由を調べてみましょう.

3.next()メソッドとnextLine()メソッドが混用しにくい理由

public class exam {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("첫번째 정수 입력 : ");
		int i = sc.nextInt();
		System.out.println(i);
		
		System.out.print("nextLine() 메서드 : ");
		String str1 = sc.nextLine();
		System.out.println(str1);
		
		System.out.print("두번째 정수 입력 : ");
		int j = sc.nextInt();
		System.out.println(j);
		
		System.out.print("next() 메서드 : ");
		String str2 = sc.next();
		System.out.println(str2);
	}
}

以上のように、nextInt()の後にnextLineを実行すると、nextLine()が入力できなくなり、自動的にスキップされます.これはenter(すなわち、開文字)がnextInt()を実行するときに1234を入力し、enterを押すと1234が返されるが、最後に押されたenter値はバッファの位置に残っているためである.
その後に実行されるnextLine()はenter値でリターンを終了するので、バッファ内の残りのenter値を受信し、すぐに終了します.
この問題はどうやって解決しますか?

4.問題解決の方法


1)nextLine()の追加

public class exam {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("정수 입력 : ");
		int i = sc.nextInt();
		System.out.println(i);
		
		sc.nextLine(); // enter (개행문자) 제거 - 버퍼 비우기
		
		System.out.print("nextLine() 메서드 : ");
		String str = sc.nextLine();
		System.out.println(str);
	}
}

nextInt()を使用して、次のnextLineを使用してバッファに蓄積されたenterを削除すると、正常に入力されていることがわかります.

2) Integer.ParseInt()形式のコピー

public class exam {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("정수 입력 : ");
		int i = Integer.parseInt(sc.nextLine());
		System.out.println(i);
		
		System.out.print("nextLine() 메서드 : ");
		String str = sc.nextLine();
		System.out.println(str);
		
		System.out.println("정수 변환 확인 : " + i+4321);
	}
}

nextInt()の代わりにnextLine()を文字列として使用し、Integerを使用します.これをParseInt()に変換すると、上記のように整数型にうまく復元されていることがわかります.
学習の第2の方法のためか、どうしても1本の線を増やしてバッファをクリアするよりも、nextLine()の方法を統一して兄に変換して車に戻るほうがコード的にきれいに見えます.🙂