Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在按列排序的二维数组中查找二维数组元素的索引_Java_Arrays_Sorting_Multidimensional Array_Columnsorting - Fatal编程技术网

Java 在按列排序的二维数组中查找二维数组元素的索引

Java 在按列排序的二维数组中查找二维数组元素的索引,java,arrays,sorting,multidimensional-array,columnsorting,Java,Arrays,Sorting,Multidimensional Array,Columnsorting,我有两个相同维度的二维整数数组需要比较。我将用一个示例来解释我需要什么,其中Sjm1是“原始”数组,Sjm2数组的值与Sjm1相同,但每列的值是按递增顺序排列的(即“0”是第0列中Sjm1的最小值,因此Sjm2[0][0]=0;然后“70”是第0列中Sjm1的下一个最小值⇒ Sjm2[1][0]=70(以此类推)。我有一个将“Sjm1”数组排序为“Sjm2”的方法 现在我需要构建一个“输出”数组(二维整数数组),其中每列中的值表示Sjm1数组中与Sjm2中的列元素一致的行数。例如,输出[0]

我有两个相同维度的二维整数数组需要比较。我将用一个示例来解释我需要什么,其中Sjm1是“原始”数组,Sjm2数组的值与Sjm1相同,但每列的值是按递增顺序排列的(即“0”是第0列中Sjm1的最小值,因此
Sjm2[0][0]=0
;然后“70”是第0列中Sjm1的下一个最小值⇒
Sjm2[1][0]=70(以此类推)。我有一个将“Sjm1”数组排序为“Sjm2”的方法

现在我需要构建一个“输出”数组(二维整数数组),其中每列中的值表示Sjm1数组中与Sjm2中的列元素一致的行数。例如,
输出[0][0]=5
,因为
Sjm1[0][0]=366
Sjm2[5][0]=366
<代码>输出[1][0]=2
,因为
Sjm1[1][0]=104
Sjm2[2][0]=104
;等等)

因此,对于前面介绍的示例,所需的输出必须如下所示:

我尝试用Java构建一个方法,在该方法中,我传递两个二维整数数组,但无法按需要工作:

publicstaticint[]sec(int[]Sjm1,int[]Sjm2){
int k;
int[][]输出=新的int[Sjm1.length][Sjm1[0.length];
对于(int j=0;j
输出显然不是我需要的:

[0, 1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6]
[0, 1, 2, 3, 4, 5, 6]

如果有人能帮助我,我会很高兴。

如果我答对了您的问题,问题在于
k
变量

它表示第二个数组上的行索引,因此在比较两个数组上的值时,应使用
k
索引第二个数组的行

另外,您应该在当前列中的所有行上迭代
k
,因此代码如下所示(我修改了变量以使其更具描述性):

publicstaticint[]sec(int[]Sjm1,int[]Sjm2){
int[][]输出=新的int[Sjm1.length][Sjm1[0.length];
for(int row=0;row

请注意,尽管此代码有效,但我怀疑它是否最佳,因此我不会将其用于非常大的数据集。

如果我没有弄错您的问题,问题在于
k
变量

它表示第二个数组上的行索引,因此在比较两个数组上的值时,应使用
k
索引第二个数组的行

另外,您应该在当前列中的所有行上迭代
k
,因此代码如下所示(我修改了变量以使其更具描述性):

publicstaticint[]sec(int[]Sjm1,int[]Sjm2){
int[][]输出=新的int[Sjm1.length][Sjm1[0.length];
for(int row=0;row

请注意,虽然此代码可以工作,但我怀疑它是否最佳,因此我不会将其用于非常大的数据集。

首先,您需要迭代排序的_Sjm2[j][
以找出
Sjm1[j][m]
值的位置,因此您需要另一个for in
for(int m=0;m
。另一件事是为什么要使用
k?k
不会显示数组中的任何内容。如果希望获得排序位置,则应使用在中的new for语句中声明的另一个变量
Sorted_Sjm2[j][]
。因为我们知道您在列
j
中,所以我们现在只需要知道排序数组的行号

publicstaticint[]sec(int[]Sjm1,int[]Sjm2){
int k;
int[][]输出=新的int[Sjm1.length][Sjm1[0.length];
对于(int j=0;j
首先,您需要迭代排序的_Sjm2[j][
以找出
Sjm1[j][m]
值的位置,因此您需要另一个for in
for(int m=0;m
。另一件事是为什么要使用
k?k
不会显示数组中的任何内容。如果希望获得排序位置,则应使用在中的new for语句中声明的另一个变量
Sorted_Sjm2[j][]
。因为我们知道您在列
j
中,所以我们现在只需要知道排序数组的行号

publicstaticint[]sec(int[]Sjm1,int[]Sjm2){
int k;
int[][]输出=新的int[Sjm1.length][Sjm1[0.length];
对于(int j=0;joutput[j][m] = Arrays.asList(Sjm2[j]).indexOf(Sjm1[j][m]);
[5, 3, 4, 5, 5, 4, 4, 1]
[2, 4, 2, 0, 2, 2, 2, 5]
[6, 5, 5, 6, 4, 5, 5, 0]
[3, 2, 0, 3, 3, 3, 3, 6]
[0, 1, 3, 1, 1, 1, 1, 3]
[1, 0, 1, 2, 0, 0, 0, 4]
[4, 6, 6, 4, 6, 6, 6, 2]