Это означает, что cells
пуст. Если это не так, мы просто догадываемся - отправьте полную программу.
Однако, я бы сильно призываю вас, чтобы добавить фигурные скобки вокруг if
заявление :
public void assignCell()
{
Prisoner prisoner = prisoners.get(id-1);
for(Cell cell : cells)
{
if(cell.isAvailable())
{
cell.allocate(prisoner);
String bunk = null;
if(cell.isEven())
{
bunk = "top bunk of cell";
}
else
{
bunk = "only bunk of cell";
}
System.out.println("\t\t" + prisoner.nameToString()
+ " is in the " + bunk + cell);
}
}
}
На самом деле, я бы тогда попытаться уменьшить вложенность и использовать условный оператор тоже :
public void assignCell()
{
Prisoner prisoner = prisoners.get(id-1);
for(Cell cell : cells)
{
if(!cell.isAvailable())
{
continue;
}
cell.allocate(prisoner);
String bunk = cell.isEven() ? "top bunk of cell" : "bottom bunk of cell";
System.out.println("\t\t" + prisoner.nameToString()
+ " is in the " + bunk + cell);
}
}
О, и вы, вероятно, хотите return
или break
ул там, в противном случае один заключенный будет назначен всем доступным ячейкам. Действительно, это может произойти с вашим первым заключенным: очень внимательно проверьте выход программы!
Другой альтернативой является только отступа if
заявление - но дать некоторые признак того, что вы действительно имеете в виду if
заявление, чтобы быть в курсе. Лично мне всегда полезно использовать фигурные скобки, так как тогда вы не можете случайно добавить другой оператор после первого, который выглядит, как если бы он был частью цикла, но это не так. Читаемость - король, ИМО.
Есть ли какие-либо экземпляры 'Cell' в коллекции' cells'? Вы получаете какие-то исключения, или просто не делаете то, что ожидаете? – Welbog
Скит на что-то с его ответом о пропавшем перерыве. Я собираюсь догадаться, что ваша петля проходит и назначает все ячейки одному заключенному из-за отсутствия инструкции break. В этом случае больше не будет доступных ячеек в следующий раз, когда вы вызовете метод assignCell, чтобы он пропустил цикл. –