Это предполагает, что cells
пусто.Если это не так, мы просто догадываемся - пожалуйста, опубликуйте программу complete .
Однако я бы настоятельно настоятельно рекомендовал бы вам добавить скобки вокруг вашего утверждения if
1 :
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
, в противном случае одному заключенному будет присвоено всех доступных камер.Действительно, это может происходить с вашим первым заключенным: очень внимательно проверьте вывод программы!
1 Еще одна альтернатива - просто сделать отступ для оператора if
- но дать некоторый признак того, что вы действительно имели в виду оператор if
в цикле.Лично я считаю полезным всегда использовать фигурные скобки, так как тогда вы не можете случайно добавить еще один оператор после первого, который выглядит , как будто он будет частью цикла, но это не так.Читабельность - король, ИМО.