0

この機能を備えたプログラムを作成したい:ユーザーは自分が持っているものの数を入力します。彼がこれらのことを入力すると、リストに追加されます。私はこのコードを作りました:

public class lists {
public static void main(String[] args){
    Scanner input = new Scanner(System.in);
    LinkedList<String> list= new LinkedList<String>();
    System.out.println("How many things you have?");
    int size=input.nextInt();
    LinkedList<String> list= new LinkedList<String>();
    System.out.println("Enter those things");
    for(int c=1;c<=size;c++) list.add(input.nextLine().toString());     
        System.out.printf("%s",list);

}   

}

たとえば、番号 5 の出力は次のようになります。

[, 1st Inputed, 2nd Inputed,3rd Inputed, 4nd inputed]

リストの最初の文字列が空で、必要なものを少なく入力できる理由を知りたいです。ご協力ありがとうございました。

4

2 に答える 2

1

コードは次のようになります。

 public class lists {
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.println("How many things you have?");
        int size=input.nextInt();
        LinkedList<String> list= new LinkedList<String>();
        System.out.println("Enter those things");
        for(int c=0 ;c < size; c++)
        {
            String s = input.next();//use next() instead of nextLine()
            list.add(s);     
        }
            System.out.printf("%s",list);

       } 
    }

Scanner.nextLine()公式文書に記載されているように:

このスキャナを現在の行を超えて進め、スキップされた入力を返します。このメソッドは、最後の行セパレーターを除いて、現在の行の残りを返します。位置は次の行の先頭に設定されます。

が呼び出された後nextInt()、割り当てられたメモリ行を適切に終了していません。したがって、nextLine()が初めて呼び出されると、実際には値が含まれていた前の行が実際に終了します。つまりnextInt()、新しい値を取得するのではなく、経由で入力されます。Stringそのため、 のStringインデックス0list空白になります。したがって、前の空白行ではなく入力された値の読み取りを続行するには (によって返される値が終了しないため) 、公式文書によると次のようにnextInt()使用できます。Scanner.next()

このスキャナーから次の完全なトークンを検索して返します。

于 2013-03-23T18:19:43.463 に答える
0

問題はinput.nextInt()、末尾の改行を消費しないため、最初input.nextLine()は空の文字列を返すことです。

これを回避するには、いくつかの方法があります。最善の方法を見つけるための演習として残しておきます。

于 2013-03-23T18:19:58.627 に答える