Булевы многомерные массивы, работающие с вложенными циклами for - остановка - PullRequest
0 голосов
/ 11 февраля 2012

Я тут немного тупой.

Я относительно новичок в Java / программировании в целом. Я хочу сделать программу, которая "записывает места" в сетке 4х4. Этот многомерный массив будет иметь тип boolean, поэтому, если место не занято, оно возвращает false, но если оно занято, оно возвращает true. Я хочу иметь возможность указывать разные места, так как первые два ряда будут отличаться от двух последних рядов. Прямо сейчас у меня есть метод, но он просто записывает все первые две строки, как только я вызываю этот метод (как следует, логически говоря). Но я хочу, чтобы можно было бронировать только одно место за раз, чтобы оно закончилось после того, как будет забронировано одно место. Если я выберу то, что хочу забронировать другое место, оно перейдет к следующему доступному месту в этих строках или столбцах.

Вот код на данный момент:

import javax.swing.JOptionPane;

public class Seats{
int maxRows = 4;
int maxCols = 4;
boolean seating[][] = new boolean[maxRows][maxCols];

String bookSeat = null;

public static void main(String []args){
    Seats seats = new Seats();
    seats.start();

}

public void start(){
    bookSeat = JOptionPane.showInputDialog(null, "Book a seat? (y/n)");
    if(bookSeat.equals("y")){
        bookSeat();
    }else{
        JOptionPane.showMessageDialog(null, "Okay.");       
    }
    displaySeats(seating);
}

private boolean bookSeat(){
    boolean isBooked = false;
    for(int row = 0; row <2; row++){
        for(int col = 0;col<maxCols;col++){
            if (seating[row][col] == false){
                seating[row][col] = true;
                isBooked = true;
            }
        }
    }
    return isBooked;

}

private void displaySeats(boolean[][] anArray){

    String seatTaken;
    int r=0;
    int c=0;
    for(int display=0; display<1; display++){
        for(r=0;r<anArray.length;r++){
            for(c=0;c<anArray.length;c++){
                if (seating[r][c]==false){
                    seatTaken = "O";
                }
                else{
                    seatTaken = "X";
                }
            System.out.print("\t[" + seatTaken + "] \t");

            }
            System.out.println("");

        }
    }       
  }
}

Ответы [ 2 ]

0 голосов
/ 11 февраля 2012

Предполагая, что вы хотите выйти из этого метода, как только он найдет место.

private boolean bookSeat()
{
  for(int row = 0; row <2; row++)
  {
    for(int col = 0;col<maxCols;col++)
    {
        if (seating[row][col] == false)
        {
            seating[row][col] = true;
            return true;
        }
    }
  }
  return false;
}
0 голосов
/ 11 февраля 2012
private boolean bookSeat(){
    boolean isBooked = false;
    for(int row = 0; row <2; row++){
        for(int col = 0;col<maxCols;col++){
            if (seating[row][col] == false){
                seating[row][col] = true;
                return true;
            }
        }
    }
    return false;
}

Я думаю, что вам нужно вернуться, как только вы найдете свободное место и забронируете его - как показано в методе выше.Таким образом, петли не будут продолжаться, если вы забронируете место.

...