需要帮助来解释用java制作的电影节目中的座位

时间:2015-05-12 11:16:43

标签: java

有人可以帮我理解这里发生了什么吗?我发现很难理解这些多维数组的发生情况。如果有人能详细解释我该程序的作用。我应该在电影院找到第一个座位。该计划将由第一个席位终止。

public class Cinema {




private boolean[][] seats = {{ true, true, false, false, false, true, true false},
                             { true, true, true, true, true, true, true, true},
                             { true, true, true, true, true, true, true, true}}



public void findAvailable() {

    boolean found = false;

    int row = 0;
    while (!found && row < seats.length) {
        int seat = 0;
        while (!found && seat < seats[row].length) {
          if (seats[row][seat]) {
            found = true;
            System.out.println("Row = " + row + " Seat = " + seat);
          }
          seat++;
        }
        row++;
    }
}

4 个答案:

答案 0 :(得分:3)

电影院实际上是解释二维数组的好方法。

boolean[][] seats = 
{{true, true, false, false, false, true, true false},
 {true, true, true, true, true, true, true, true},
 {true, true, true, true, true, true, true, true}  }

您可以将数组中的每一行视为一排座位。现在,您可以使用seats[0][0]的第一个座位,或seats[0][1]第一行的第二个座位。要浏览第一个行中的所有席位,您可以进行for循环:

for(x = 0; x < 8; x++){
    System.out.println("The boolean value of seat " + x + " on the first row is: " + seats[0][x]);
}

现在您还可以使用seats[1][x]

搜索第二个行(请记住数组的索引始终从0开始)

现在,如果你想循环遍历所有可能的座位,你必须制作两个for循环:一个循环遍历座位数,另一个循环遍历行:

for(y = 0; y < 3; y++){
    for(x = 0; x < 8; x++){
        System.out.println("The boolean value of seat " + x + " on row "+ y + " is: " + seats[y][x]);
    }
}

请注意,您不能循环比阵列的大小(3行和8个席位)。这就是您使用.length属性来确定大小的原因。

现在唯一要做的就是找到第一个可用的座位,这样你再次遍历数组,当那个特定座位的布尔值为true时,你必须打破这两个座位的循环。这就是为什么有一个额外的布尔变量found,当找到一个座位并且导致循环不再执行时,它被设置为true(注意while条件下的! )。

答案 1 :(得分:1)

首先 - 多维数组只是数组的数组。 要理解代码,请按照每行的注释进行操作:

 public class Cinema {




   private boolean[][] seats = {{ true, true, false, false, false, true, true false},
                                 { true, true, true, true, true, true, true, true},
                                 { true, true, true, true, true, true, true, true}}



    public void findAvailable() {

        boolean found = false; // No available seats found be default

        int row = 0; // Number of the row set to 0 by default 
        while (!found && row < seats.length) { // While seat is not found AND row is not exceeding number of all rows 
            int seat = 0; // Number of seat set to 0 be default 
            while (!found && seat < seats[row].length) { // While seat is not found AND seat number is not exceeding the number of seats IN the row 
              if (seats[row][seat]) { // if seat at row number equals to true
                found = true; // set found to true
                System.out.println("Row = " + row + " Seat = " + seat);
              }
              seat++; // increment seat to next one
            }
            row++; // increment row to next one 
        }
    }

A very good explanation of 2D arrays here

答案 2 :(得分:0)

您可以将此算法重写为:

public void findAvailable() {

    boolean found = false;

    int row = 0;
    while (!found && row < seats.length) {
        int col= 0;
        while (!found && col< seats[row].length) {
          if (seats[row][col]) {
            found = true;
            System.out.println("Row = " + row + " Seat = " + seat);
          }
          col++;
        }
        row++;
    }
}

我希望现在能够自我解释。继续搜索从0开始的每一行的座位,然后在列中搜索相同的座位。所以搜索从[0,0]开始直到[n,n],当找到座位时我们就完成了。

答案 3 :(得分:0)

让我们先打破您的代码:

$ ./bin/frequency_array
The number 1 appears 2 time(s).
The number 2 appears 5 time(s).
The number 3 appears 1 time(s).
The number 4 appears 1 time(s).
The number 5 appears 2 time(s).
The number 6 appears 1 time(s).
The number 7 appears 2 time(s).
The number 8 appears 0 time(s).
The number 9 appears 1 time(s).

所以,我们在这里宣布一个名为 Cinema 新数据类型/数据结构。

您声明的这个数据结构,它有一个私有(您将无法从 Cinema class 之外访问它)属性称为席位,这是类型布尔矩阵和公共方法(可以从Cinema类外部访问)名为 findAvailable ,不需要参数。

为了澄清,我们指出任何矩阵都是由一组行组成的,每一行都有一组列。此外,我们在Java中声明/访问矩阵的方式是:

public class Cinema { ... }

那么让我们分解这些座位的代码,不管吗?

// Access; telling which columns and rows we want to access.
myMatrix[rowIndex][columnIndex];
// Creation; telling what sizes we want for our matrix.
DataType[][] variable = new DataType[NumberOfRows][NumberOfColumns];

这与:

完全相同
private boolean[][] seats = {{ true, true, false, false, false, true, true false},
                             { true, true, true, true, true, true, true, true},
                             { true, true, true, true, true, true, true, true}}

所以有了更多的间距和缩进似乎更清晰;基本上,你要创建一个布尔矩阵,每行有3行8列。

继续使用该方法,该方法返回 void ,即不返回任何内容。

在该方法中,您正在对矩阵执行简单搜索:您正在访问每个单元格中查找包含“true”值的第一个单元格。

让我们通过评论来完成你的代码。

    private boolean[][] seats = {
               // This is the instantiation of one row, with 8 columns
               { true, true, false, false, false, true, true false},
               // Another row with another 8 more columns (and its values)                                     
               { true, true, true, true, true, true, true, true},
               // And another row.                      
               { true, true, true, true, true, true, true, true}
    };