将空间留在二维阵列中

时间:2014-11-18 18:18:13

标签: java arrays eclipse

所以,我刚开始为学校开设一个非常简单的项目,我想为体育场创建一个预订系统。我有一个二维阵列,可以创建一个简单的7X10阵列。但是,我想在阵列中间留出一些空间来代表球场中的球场/场地。我想知道怎么做?

如果可能的话,我在想数组中的数组吗?

到目前为止,这是我的代码(大部分来自此处的另一个问题):

package FootballMatch;

public class Seats {

public static void main(String[] args) {

    System.out.print("\t\t Stadium Seating \n");

    int seatArray[][]= new int[10][7];
    int i, x, y = 1;

    for(i = 0; i < 10; i++) {

        for(x = 0; x < 7; x++) {

            seatArray[i][x] = y;
            y++;
        }   //  end inner for
    }   //  end outer for

    for(int[] row : seatArray) {

        printRow(row);
    }


}   //  end of main

public static void printRow(int[] row) {
    for (int i : row) {

        System.out.print(i);
        System.out.print(" \t");
    }

    System.out.println();
}
}

输出:

`Stadium Seating 
1   2   3   4   5   6   7   
8   9   10  11  12  13  14  
15  16  17  18  19  20  21  
22  23  24  25  26  27  28  
29  30  31  32  33  34  35  
36  37  38  39  40  41  42  
43  44  45  46  47  48  49  
50  51  52  53  54  55  56  
57  58  59  60  61  62  63  
64  65  66  67  68  69  70`

所以我希望数组的第三到第八行中的每个第3到第5个数字都不可见,如下所示:

`Stadium Seating 
1   2   3   4   5   6   7   
8   9   10  11  12  13  14  
15  16  _   _   _   20  21  
22  23  _   _   _   27  28  
29  30  _   _   _   34  35  
36  37  _   _   _   41  42  
43  44  _   _   _   48  49  
50  51  _   _   _   55  56  
57  58 59   60  61  62  63  
64  65  66  67  68  69  70`

请注意,所有这些数字都可能会更改为&#39; x&#39;在完成的程序中。 &#39; X&#39;意思是座位可用,空位意味着它的领域!

2 个答案:

答案 0 :(得分:3)

关于ControlAltDel的建议,对这个问题(也允许以后扩展)的精心设计的答案是创建一个Seat类来代表一个席位。

public class Seat{

    private int index;  //-1 if not available, > 0 otherwise
    private boolean available;

    /** Creates an available seat with index i. i > 0. */
    public Seat(int i){
        index = i;
        available = true;
    }

    /** Creates a non-available seat. */
    public Seat(){
        index = -1;
        available = false;
    }

    /** Return a string representation of this Seat. Its index if available, - otherwise */
    public String toString(){
        if(available) return index + "";
        else return "-";
    }
}

然后你可以创建一个代表你的体育场的Seat矩阵:

public static void main(String[] args) {

    System.out.print("\t\t Stadium Seating \n");

    Seat seatArray[][]= new Seat[10][7];
    int i, x, y = 1;

    for(i = 0; i < 10; i++) {
        for(x = 0; x < 7; x++) {
            if(i >= 2 && i <= 7 && x >= 2 && x <= 4){
                seatArray[i][x] = new Seat(); //Not available seat
            } else {
                seatArray[i][x] = new Seat(y);
            }
            y++;
        }
    }

    for(Seat[] row : seatArray){ printRow(row); }
}
public static void printRow(Seat[] row) {
    for (Seat s : row) {

        System.out.print(s); //toString method called implicitly here.
        System.out.print(" \t");
    }

    System.out.println();
}

答案 1 :(得分:0)

使用布尔数组表示某人可以占用这些位置。

为此,您必须更改打印方式。你必须使用如下代码:

// You must set canSeat at your will (true and false).
public static void print(int[][] seatArray, Boolean canSeat[][]) {
    for(i = 0; i < 10; i++) {
        for(x = 0; x < 7; x++) {
            if(canSeat[i][x])
                System.out.print(seatArray[i][x]);
            else
                System.out.print("  ");
            System.out.print(" \t");
        }
    }
}