有人可以帮我理解这里发生了什么吗?我发现很难理解这些多维数组的发生情况。如果有人能详细解释我该程序的作用。我应该在电影院找到第一个座位。该计划将由第一个席位终止。
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++;
}
}
答案 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]
现在,如果你想循环遍历所有可能的座位,你必须制作两个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
}
}
答案 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}
};