2018-3-8 next(),nextInt(),nextLine()に関する疑問と理解を記録する

2079 ワード

import java.util.Scanner;

public class Solution {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        
        int i = scan.nextInt();
        double d=scan.nextDouble();
        String s=scan.nextLine();
        System.out.println("String: " + s);
        System.out.println("Double: " + d);
        System.out.println("Int: " + i);
    }
}

これは私が準備し始めたコードです.入力すると
42
3.1415
Welcome to  Java!

出力は
String: 
Double: 3.1415
Int: 42

どうして
String s=scan.nextLine();

このコードは実行されていないように見えますか?実はそうではありません.まずnext()メソッド、nextInt()メソッド、nextLine()メソッドの解釈を見てみましょう
nextInt(): it only reads the int value, nextInt() places the cursor in the same line after reading the input.
next(): read the input only till the space. It can't read two words separated by space. Also, next() places the cursor in the same lineafter reading the input.
nextLine():  reads input including space between the words (that is, it reads till the end of line ). Once the input is read, nextLine() positions the cursor in the next line.コード内でdouble d=scan.nextDouble();完全な読み取りではなく、doubleの数値部分だけを読み取る、残りの数値の後ろの「」部分は読み取らないので、String s=scan.nextLine();最初はdoubleの残りの数値の後ろの「」部分を読み取っていましたが、このような「行列現象」を避けるにはどうすればいいのでしょうか.
        double d=scan.nextDouble();
        String s=scan.nextLine();

実はとても简単で、もし1行を読みたいならば、私达は先にdoubleの后の空白の部分を読み出して、double d=scan.nextDouble();コードを追加しますscan.nextLine();
public class mmm {
public static void main(String[] args) {
	Scanner sc=new Scanner(System.in);
	int i=sc.nextInt();
	
	double d=sc.nextDouble();
	sc.nextLine();
	String s=sc.nextLine();
	System.out.println("String: " + s);
    System.out.println("Double: " + d);
    System.out.println("Int: " + i);
}
}

出力結果:
42
3.1313
welcome to java
String: welcome to java
Double: 3.1313
Int: 42
個人的に理解して、不足があれば指摘して、感謝します!