2015-05-12 68 views
0

有人可以幫我理解這裏發生了什麼嗎?我發現很難理解這些多維數組的情況。如果有人能詳細解釋我的程序是什麼。我應該在電影院裏找到第一個可用的座位。該計劃將由第一個座位終止。需要幫助來解釋在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++; 
    } 
} 

回答

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],當一個座位被發現,我們就完成了。

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

3

一個電影院實際上是解釋一個2維數組的好方法。

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]); 
} 

現在你也可以搜索第二行(記住,數組的索引總是開始在0)與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,當發現座位並導致循環不再執行時(注意while條件中的!),它被設置爲true

+0

@ zelda93如果回答了您的問題,請將其標記爲已接受;) – moffeltje