计算整数到数组位置java

时间:2013-02-13 05:18:39

标签: java if-statement multidimensional-array modulo

不明白如何解决这个问题。 我需要接受座位号作为参数(座位)。然后将该座位号转换为二维数组的行和列索引。

检查自己我一直假设有10行(0-9)和2个座位佩尔(0-1)并从1-20中选出一个座位来检查数学。但是可以有任意数量的行和列。这就是我用来检查自己的方式。

static void isAvailable(int seat, boolean seat[][]) {

    int row = 0;
    int column = 0;

    if (seat > 0 && seat <= (getRows() * getSeatsPerRow())){
        row = (seat ) % getRows();
        column = (seat - 1) % getSeatsPerRow;
        seat[row][column] = false;
    }
}

假设座位是这样排列的:

            seatsPerRow
       0   1   2   3   4   5   6 

    0 (1) (2) (3) (4) (5) (6) (7)

 r  1 (8) (9) (10)(11)(12)(13)(14)

 o  2 (15)(16)(17)(18)(19)(20)(21)

 w  3  ...

 s  4  ...

    .

    .

    .

说我想找到座位11.这将是座位[1] [3]。我不明白如何将座位号转换为二维阵列上的位置。

3 个答案:

答案 0 :(得分:1)

假设座位安排是这样的:

 1  2
 3  4
 5  6
 7  8
 9 10
11 12
13 14
15 16
17 18
19 20



int col = (seat % 2 == 0)? 1:0;
int row = (int)Math.ceil(seat / 2.0f); 

答案 1 :(得分:1)

好吧,假设座位从1开始编号,您只需使用:

即可获得列索引
int column = (seatNum - 1) % seat[0].length;

然后,您可以使用简单表达式找到该行:

int row = (int) ((seatNum - 1) / seat[0].length);

然后,您可以通过以下方式获得实际元素:

seats[row][column]

这两个表达式都适用于seat数组的所有维度(0 x 0除外)。

第一行将使用modulo来查找seatNum / seat[0].length余数,或者基本上座位数除以每行的座位数。这会将column重新调整到正确的范围。

接下来,第二行将座位数除以行的长度,这将找到行本身。然后我们将它转​​换为带有(int)的int,它会截断它,删除可能由该操作产生的任何小数。在这种情况下,我们实际上是在执行纯整数数学运算,因此无需进行强制转换。

答案 2 :(得分:1)

模数运算符在这里是非常宝贵的,因为它可以确定我们想要使用哪个座位。

首先,让我们考虑我们的假设并将它们转换为更抽象的东西:

  • 有N个座位,其中N = 20.我们将N作为我们的行。
  • 有K行,其中K = 2.我们将K作为我们的列。
  • 鉴于此,每排有N / K座位。

现在,我们可以使用一些模数学来解决问题的其余部分。让我们现在宣布我们的座位数。

boolean[][] seats = new boolean[N][K]; //presumed

如果我们要申请13号席位,那么我们需要弄清楚两件事:

  • 是什么座位?
  • 是什么座位?

鉴于上述情况,该行的数学运算如下:

int row = (seatWanted % N)-1; // (13 % 10)-1 = 2.

现在,列也很容易找到 - 但我们会使用整数除法而不是模数。

int column = seatWanted / K; // 13 / 10 = 1.

其余部分是对读者的练习,但我们希望将seats[2][1]标记为已拍摄。