web-dev-qa-db-ja.com

nextLine()-methodを呼び出すときに、Scanner(System.in)に文字列を入力できないのはなぜですか?

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

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?
8
user1646373

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

これを修正するためにintを取得した後、別の.nextLine()を挿入できます。または(私はこの方法を好む)、intstringとして読み取り、intに解析します。

17
NominSim

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

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

オプション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);
    }
}
5
Yalla T.

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

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

    scan.next();

2
Apurv Pandey

Stringを読み取るには、scan.next()を使用するだけです。

2
Marcelo

temporaryscan.nextLine();を使用します。これは\ n文字を消費します

1
Ajay Anto

NextLine()でテキストをスキャンしようとしないでください。同じスキャナーでnextInt()を使用した後! Javaスキャナー、および多くのJava開発者は整数に別のスキャナーを使用することを選択します。これらのスキャナーをscan1およびscan2と呼ぶことができます。あなたが欲しい。

1
Umair

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

1
user1646373

パーサーを使用したくない場合:

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(); // This line you have to add (It consumes the \n character)
System.out.println("enter a string");
s = scan.nextLine();
System.out.println("string is=" + s);
0

\ n文字を消費する簡単なソリューション:

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);

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

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

0
esskay
import Java.util.*;

public class ScannerExample {

    public static void main(String args[]) {
        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.next();
        System.out.println("string is=" + s);
    }
}
0
Nizampatnam