Java 计算整数到数组位置

Java 计算整数到数组位置,java,if-statement,multidimensional-array,modulo,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 &

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

为了验证我自己,我一直假设有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;
    }
}

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

假设座位安排如下:

 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  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开始编号,只需使用以下方法即可获得列索引:

int column = (seatNum - 1) % seat[0].length;
然后,您可以使用一个简单的表达式查找该行:

int row = (int) ((seatNum - 1) / seat[0].length);
然后,您将通过执行以下操作获得实际元素:

seats[row][column]
这两个表达式应适用于
座椅
数组的所有维度(0 x 0除外)

第一行将使用模来查找
seatNum/seat[0]的剩余部分。长度
,或者基本上是座位数除以每排座位数。这将把
重新构造到正确的范围


接下来,第二行将座位数除以一行的长度,这将找到该行本身。然后,我们使用
(int)
将其转换为int,从而截断它,删除可能由该操作产生的任何小数。在本例中,我们实际上执行的是纯整数数学,因此不需要强制转换。

好吧,假设座位从1开始编号,您只需使用以下命令即可获得列索引:

int column = (seatNum - 1) % seat[0].length;
然后,您可以使用一个简单的表达式查找该行:

int row = (int) ((seatNum - 1) / seat[0].length);
然后,您将通过执行以下操作获得实际元素:

seats[row][column]
这两个表达式应适用于
座椅
数组的所有维度(0 x 0除外)

第一行将使用模来查找
seatNum/seat[0]的剩余部分。长度
,或者基本上是座位数除以每排座位数。这将把
重新构造到正确的范围


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

模运算符在这里非常有用,因为它可以确定我们想要使用的座位

首先,让我们把我们的假设转化为更抽象的东西:

  • 有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.

其余部分对读者来说是一个练习,但我们希望将
座位[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.

其余部分对读者来说是一个练习,但我们希望将
座位[2][1]
标记为已占用。

座位[0]是什么意思?这是一个二维数组。我只了解java的基本知识。@user1368970它将获得数组的第一行。然后我们可以使用
.length
来计算行的长度,而不是外部数组的长度,这是行的数量,也就是列的长度。我还是不太明白,当我计算时,它没有给出正确的行号或列号。请检查我的更新。好的!现在完全明白了!非常感谢!是否确实需要强制转换为int?seat[0]是什么意思?这是一个二维数组。我只了解java的基本知识。@user1368970它将获得数组的第一行。然后我们可以使用
.length
来计算行的长度,而不是外部数组的长度,这是行的数量,也就是列的长度。我还是不太明白,当我计算时,它没有给出正确的行号或列号。请检查我的更新。好的!现在完全明白了!非常感谢!是否确实需要强制转换为int?Math.ceil()mrthod给出大于或等于参数的最小整数。有关详细信息,请参阅Math.ceil()mrthod提供大于或等于参数的最小整数。为了了解更多信息,在编写此类时,n和k将是rows和seatsPerRow(即column)的参数。最终,我假定您可以使用
.length
从数组中提取每行和每列的长度。N和K用于说明