2015-10-21 2 views
0

Я застрял в бесконечной петле и не могу понять, почему. Я устанавливал границы вложенных циклов для введенных строк и столбцов, но продолжаю бесконечно. Heres мой класс Plane, и мой главный класс:Застревает в бесконечном для цикла. Не могу понять, почему?

Plane:

public class Plane { 
private Passenger[][] pArray; 
private String flightNumber; 
private int rows; 
private int seatsPerRow; 

public Plane(String fn, int r, int spr) { 
    flightNumber = fn; 
    rows = r; 
    seatsPerRow = spr; 
    pArray = new Passenger[r][spr]; 
} 

public boolean addPassenger(String name, int ro, int sir) { 
    boolean result = false; 

    if(ro <= rows && sir <= seatsPerRow && pArray[ro][sir] == null){ 
     pArray[ro][sir] = new Passenger(name); 
     System.out.println("Passenger " + name + " was added."); 
     result = true; 
    } 
    return result; 
} 

public boolean removePassenger(int r, int s){ 
    boolean result = false; 

    if(pArray[r][s] != null){ 
     pArray[r][s] = null; 
     System.out.println("Passenger was removed."); 
     result = true; 
    } else { 
     System.out.println("Invalid seat -- please try again."); 
    } 
    return result; 

} 

public void showSeats(){ 
    System.out.print(" "); 
    for (int j = 0; j < pArray[0].length; j++) { 
     System.out.printf("|%25d|", j); 
    } 
    System.out.println(); 
    // Display the contents of the machine 
    for (int i = 0; i < rows; i++) { 
     // Display the row label 
     System.out.printf("%2d", i); 
     for (int j = 0; j < seatsPerRow; j++) { 
      if (pArray[i][j] == null) { 
       // slot is empty 
       System.out.printf("|%25s|", ""); 
      } else { 
       System.out.printf("|%25s|", pArray[i][j].getName()); 
      } 
     } 
     System.out.println(); 
    } 
    System.out.println(); 
} 

public void passengerList(){ 
    for(int i = 0; i < rows; i++){ 
     for(int j = 0; j < seatsPerRow; j++){ 
      if(pArray[i][j] != null){ 
       System.out.println(pArray[i][j]); 
      } 
     } 
    } 
} 

Главная:

общественного класса Main {

public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 
    String flight; 
    int rows; 
    int numRows; 
    String line; 

    System.out.println("Welcome to Oswego Airlines\nEnter a flgiht number: "); 
    flight = sc.nextLine();  
    System.out.println("Enter the number of rows: "); 
    line = sc.nextLine(); 
    rows = Integer.parseInt(line); 
    System.out.println("Enter the number of seats per row: "); 
    line = sc.nextLine(); 
    numRows = Integer.parseInt(line); 

    Plane plane = new Plane(flight, rows, numRows); 

    System.out.println("Enter add, remove, seats, list, or quit: "); 
    String command = sc.nextLine(); 

    while(command != "quit"){ 
     if(command.equalsIgnoreCase("add")){ 
      System.out.println("Enter passenger name, row, and seat: "); 
      String pName = sc.nextLine(); 
      String[] passenger = pName.split(" "); 
      int rowParse = Integer.parseInt(passenger[1]); 
      int seatParse = Integer.parseInt(passenger[2]); 

      plane.addPassenger(passenger[0], rowParse, seatParse); 

      System.out.println("Enter add, remove, seats, list, or quit: "); 
      command = sc.nextLine(); 

     } else if (command.equalsIgnoreCase("remove")){ 
      System.out.println("Enter row and seat: "); 

      String rName = sc.nextLine(); 
      String[] removal = rName.split(" "); 
      int rowParse = Integer.parseInt(removal[0]); 
      int seatParse = Integer.parseInt(removal[1]); 

      plane.removePassenger(rowParse, seatParse); 

      System.out.println("Enter add, remove, seats, list, or quit: "); 
      command = sc.nextLine(); 

     } else if (command.equalsIgnoreCase("seats")){ 
      plane.showSeats(); 

      System.out.println("Enter add, remove, seats, list, or quit: "); 
      command = sc.nextLine(); 
     } else if (command.equalsIgnoreCase("list")){ 
      plane.passengerList(); 
     } else { 
      System.out.println("Unknown command -- please try again.\nEnter add, remove, seats, list, or quit: "); 
      command = sc.nextLine(); 
     } 
    } 

    System.out.println("Closing Oswego Airlines"); 








} 

}

Мой друг и я смотрел но мы не можем это понять.

+0

Название этого вопроса заставило меня улыбнуться. :) –

ответ

2

Проверка равенства строк должна быть проверена с использованием .equals(). Другими словами,

while(command != "quit"){ 

должен быть

while(!command.equals("quit")){ 

Прежние проверяет, есть ли они в буквальном смысле тот же объект, а не что они имеют одинаковые значения.

+1

или, возможно, while (! "Quit" .equals (command)) {чтобы avaoid null pointer exp :-) –

+0

@AlbertPinto: Согласитесь, что это безопаснее вообще. Хотя, в случае, это не будет «null». – FatalError

+1

@AlbertPinto Вы должны использовать это только в том случае, если вам нравится скрывать ошибки программирования при неудачной проверке с равным доступом, что будет сложнее найти, если ваша программа ведет себя непредсказуемо. – Tom

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