10

このプログラムは実際にどのように機能しますか...?

import java.util.Scanner;

class string
{
    public static void main(String a[]){
        int a;
        String s;
        Scanner scan = new Scanner(System.in);

        System.out.println("enter a no");
        a = scan.nextInt();
        System.out.println("no is ="+a);

        System.out.println("enter a string");
        s = scan.nextLine();
        System.out.println("string is="+s);
    }
}

出力は次のとおりです。

enter the no
1234
no is 1234
enter a string
string is=         //why is it not allowing me to enter a string here?
4

13 に答える 13

20

.nextInt()次の を取得しますがint、改行文字は読みません。これは、「次の行」を読むように要求すると、最初から改行文字の終わりまで読むことを意味します。

これを修正する.nextLine()には、 を入手してから別のものを挿入できます。intまたは(私はこの方法を好みます)、intin を として読み取り、 にstring解析しintます。

于 2012-09-04T14:09:32.670 に答える
7

これはよくある誤解で、nextInt() を使用した直後に nextLine() に同じスキャナーを使用すると混乱を招きます。

次の行にジャンプするカーソルを自分で修正するか、整数に別のスキャナーを使用することができます。

オプション A: 2 つの異なるスキャナーを使用する

import java.util.Scanner;

class string
{

    public static void main(String a[]){
    int a;
    String s;
    Scanner intscan =new Scanner(System.in);


    System.out.println("enter a no");
    a=intscan.nextInt();
    System.out.println("no is ="+a);


     Scanner textscan=new Scanner(System.in);
    System.out.println("enter a string");
    s=textscan.nextLine();
    System.out.println("string is="+s);
        }
}

オプション B: 次の行にジャンプするだけ

class string
{
    public static void main(String a[]){
        int a;
        String s;
        Scanner scan =new Scanner(System.in);

        System.out.println("enter a no");
        a = scan.nextInt();
        System.out.println("no is ="+a);
        scan.nextLine();

        System.out.println("enter a string");
        s = scan.nextLine();
        System.out.println("string is="+s);
    }
}
于 2012-09-04T14:14:35.013 に答える
2

scan.next()を読み取るためにのみ使用する必要がありますString

于 2012-09-04T14:09:59.277 に答える
2

これは、nextInt() の実行が終了した後、nextLine() メソッドが呼び出されると、nextInt() の後に存在していた改行文字をスキャンするためです。これは、次のいずれかの方法で実行できます。

  1. nextInt() の直後に別の nextLine() メソッドを使用して、スキャナーを改行文字を越えて移動できます。
  2. 整数と文字列のスキャンに異なる Scanner オブジェクトを使用できます (scan1 と scan2 という名前を付けることができます)。
  3. 次のようにスキャナー オブジェクトで次のメソッドを使用できます。

    scan.next();

于 2016-07-09T15:46:32.110 に答える
1

scan.nextLine() を介して入力文字列を取得すると、スキャナのバッファがいっぱいになります。そのため、次回は入力をスキップします。したがって、解決策は、 Scanner の新しいオブジェクトを作成できることです。オブジェクトの名前は、以前のオブジェクトと同じにすることができます......

于 2012-09-13T14:24:32.637 に答える
0

nextint を使用したくない場合はinputstreamreadline関数を使用して文字列を読み取るバッファ付きリーダーを使用することもできます。

于 2016-05-30T11:21:48.547 に答える
-1
 s=scan.nextLine();

入力がスキップされたことを返します。

だからあなたは使うかもしれません

 s=scan.next();
于 2012-09-04T14:17:37.337 に答える