2012-05-14 10 views
0

私はスキャナーを使用して配列にデータを入力しています。 "if"ステートメントでprint(player [i] .Name)を印刷すると値が出力されるため、動作しているようです。しかし、この値をステートメント(players [1] .Name)の外側で印刷しようとすると、null値が返されます。Java配列変数がnullとして表示されていますか?

int i = 0; 
     while (scanner.hasNextLine()) { 
       if (scanner.hasNext()) { 
       players[i].Name = scanner.next(); 
       System.out.println(players[i].Name); 
       } 
       if (scanner.hasNext()) { 
       players[i].Position = scanner.next(); 
       System.out.println(players[i].Position); 
       } 
       if (scanner.hasNext()) { 
       players[i].Height = scanner.next(); 
       System.out.println(players[i].Height); 
       } 
       if (scanner.hasNext()) { 
       players[i].Weight = scanner.next(); 
       System.out.println(players[i].Weight); 
       } 
       i++;  
      }//end while 
+1

書かれているように、スキャナはすべてのプレイヤーをプレイヤー[0]に入れ、ループはi-> 9の9回ノーオペレーションを行います。完全なコードの場合もそうですか? – Thomas

+0

最後のiteratioの値をscanner.next()が返します。nullで上書きされている可能性があります... – ria

+0

forループ内に書いたwhileループだけを試しましたか?ループのために配置する必要はありません... – Vicky

答えて

1

// Get all possible scanner entries for all possible lines for i=0 
while (scanner.hasNextLine()) { 
     if (scanner.hasNext()) { 
      players[i].Name = scanner.next(); 
// .. then repeat getting all scanner entries for all lines for i=1... 

多分これはあなたが何を意味するのかである:

int i = 0; 
while (scanner.hasNextLine()) { 
    if (scanner.hasNext()) { 
     players[i].Name = scanner.next(); 
     System.out.println(players[i].Name); 
     i++; 
    } 
} 

または多分これさえ:

int i = 0; 
while (scanner.hasNextLine()) { 
    while (scanner.hasNext()) { 
     players[i].Name = scanner.next(); 
     System.out.println(players[i].Name); 
     i++; 
    } 
} 

かこれは:

int i = 0; 
while ((i < 10) && scanner.hasNextLine()) { 
    while ((i < 10) && scanner.hasNext()) { 
     players[i].Name = scanner.next(); 
     System.out.println(players[i].Name); 
     i++; 
    } 
} 
+0

を削除しました。私はあなたの解決策を試しましたが、何かが欠けているかもしれません私はより完全なコードサンプルを投稿しているので、達成しようとしているもののよりよい考えがあるかもしれません – user1392897

+0

今、プレーヤー[0]の値は正しいですが、プレーヤー[1]は1でオフ、プレーヤー[2]はオフです2 ...私はここで逃しているImを確信していません – user1392897

+0

提案:* for *ループを失う*してください。内側のwhileループ内でi ++をインクリメントします。あなたの "println"を次のように変更してください: 'System.out.println(" players "+ i +"] = "+ players [i] .Name);' – paulsm4

1

これをforループで実行します。私はそれが望ましい結果をもたらすことはないと思う。基本的には、スキャナーが次のプレイヤーにいる間に同じプレーヤーに名前を割り当てています。 forループから取り出して、ループの最後のものとしてi ++でwhileループを作成してください。あなたは(各Iのために)この10倍をやっている

+0

あなたは絶対に正しく、あなたのコメントのためにforループ – user1392897

関連する問題