2017-09-22 5 views
1

これはquestionに遭遇しましたが、それを再作成しますが、整数ではなく文字列の配列で埋めたいと思います。私は初心者であり、配列でもっと練習したいので、ArrayListではなく配列を使いたいと思っています。私はかなりコードをコピーしましたが、出力にエラーが発生しています。ここに私のコードは次のとおりです。は、ループを使用してギザギザの配列に文字列を格納します

Scanner input = new Scanner(System.in); 
    System.out.print("Enter number of arrays: "); 
    int x = input.nextInt(); 
    String [][] array = new String[x][0]; 

    for(int i = 0; i < x; i++){ 
     System.out.print("Enter number of elements for array: "); 
     int s = input.nextInt(); 
     array[i] = new String[s]; 

     for(int j = 0; j < s ; j++){ 
      System.out.print("Enter string: "); 
      String word = input.nextLine(); 
      array[i][j] = word; 
     } 
    } 

私の出力は、次のとおりです。

Enter number of arrays: 2 
Enter number of elements for array: 3 
Enter string: Enter string: hello 
Enter string: hi 
Enter number of elements for array: 2 
Enter string: Enter string: goodbye 

なぜそれが二回毎回「の文字列を入力し、」印刷していますか?論理は私には意味があるので、間違った出力を引き起こす原因がわからない。それはforループか、まさに文字列の仕組みですか?説明とコードの助けをいただければ幸いです。ありがとう

答えて

1

論理は正しいですが、nextInt()メソッドでは数字だけが読み取られ、その後に入力する「Enter」文字は読み取られませんので、nextLine()メソッドを呼び出すと、最初にループ内で 'enter '文字、2番目はあなたの入力を読み、3番目の文字を読み込みます。

for(int i = 0; i < x; i++){ 
    System.out.print("Enter number of elements for array: "); 
    int s = input.nextInt(); 
    input.nextLine(); 
    array[i] = new String[s]; 

    for(int j = 0; j < s ; j++){ 
     System.out.print("Enter string: "); 
     String word = input.nextLine(); 
     array[i][j] = word; 
    } 
1

問題はinput.nextIntは()」doesnのことだけである:それは保留中の文字を読みthathよう は、この問題を回避するために、あなたは、変数に代入せずに、ただnextInt()nextLine()を呼び出すことができます改行を取得する。それぞれのinput.nextInt()行の後ろにinput.nextLine()を置くだけで動作するはずです。

関連する問題