Java 计算整数到数组位置
我不知道怎么解决这个问题。 我需要接受一个座位号作为参数(座位)。然后将该座位号转换为二维数组的行和列索引 为了验证我自己,我一直假设有10排(0-9)和2个座位(0-1),然后从1-20中选择一个座位来验证数学。但是可以有任意数量的行和列。这正是我用来检查自己的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 &
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用于说明