2012-05-14 4 views
0

Я использую сканер для заполнения массива данными. Кажется, что это работает, потому что, когда я печатаю (player [i] .Name) в инструкции «if», он печатает значение. Но когда я пытаюсь напечатать это значение вне выражения (игроки [1] .Name), оно дает нулевое значение.Переменная массива 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], тогда цикл не будет 9 раз для i 1-> 9. Это также относится к полному коду? – Thomas

+0

Вы уверены, что оператор scanner.next() возвращает некоторое значение для последнего iteratio .. он может быть заменен на нуль ... – ria

+0

вы пробовали только цикл, который вы написали внутри цикла for ... Я думаю , Не нужно вводить в цикл ... – Vicky

ответ

1

Вы делаете это в 10 раз (для каждого I):

// 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

ПРЕДЛОЖЕНИЯ: Пожалуйста, * потеряйте * цикл «для». Увеличивайте i ++ внутри внутреннего цикла while. Измените свой «println» следующим образом: 'System.out.println (« игроки ["+ i +"] = "+ players [i] .Name);' – paulsm4

1

Это делается в цикле. Я не думаю, что это принесет желаемый результат. По сути, вы назначаете имя тому же игроку, в то время как сканер имеет следующий. Возьмите его из цикла for и просто используйте цикл while с i ++ как последний, но цикл.

+0

Вы были абсолютно правы, я удалил цикл for – user1392897

Смежные вопросы