Java:比较列中的2D数组(矩阵)元素并查找该列中包含最小值的行号

时间:2017-09-19 11:24:57

标签: java arrays matrix 2d

我有一个包含n行和s列的数组矩阵。我需要找到包含最小元素的每列的行号。例如,我有数组矩阵

double[][]={{2, 3, 4, 6}, 
            {3, 6, 7.0, 3.3}, 
            {2.1, 3.4, 2, 7.7}
           };

这里我期望0,0,2,3。因为在第一列中最小元素在第一行中,在第二列中最小元素在第一行中,对于第三列最小元素在第三行中,对于第四列最小元素是在第一行中在第二排。 我怎样才能在java代码中实现这个目标

3 个答案:

答案 0 :(得分:1)

首先,我认为你对数组的行和列感到困惑。您的数组有3行4列。我假设您要查找每行最小元素的列索引。如果是这样,请找到以下代码:

        double arr[][] = {{2, 3, 4, 6},
                {3, 6, 7.0, 3.3},
                {2.1, 3.4, 2, 7.7}
        };

        for (int i = 0; i < arr.length; i++) {
        int column = 0;
        for (int j = 1; j < arr[i].length; j++) {
            column = (arr[i][column] < arr[i][j]) ? column : j;
        }
        System.out.println("Smallest element for row " + i + " = " + column +" th column");
    }

希望这会有所帮助;)

更新了一个(查找行号):

double arr[][] = {{2, 3, 4, 6},
                {3, 6, 7.0, 3.3},
                {2.1, 3.4, 2, 7.7}
        };


        for(int j=0;j<arr[0].length;j++)
        {
            int row = 0;
            for (int i = 1; i < arr.length; i++) {
                row = (arr[row][j] < arr[i][j]) ? row : i;
            }
            System.out.println("Column = " + j + " Row = " + row);
        }

答案 1 :(得分:0)

循环。

我用嵌套循环解决了这个问题。 由于这似乎是 gimme代码问题,我将为您提供伪代码以帮助解决您的问题,以便您实施。

double mat[][]={{...},{...}}//declare your 2d array

//loop through each row
for (int i=0;i<mat.length;i++)//note mat.length is number of rows
{

   int min_j=0;//for each row reset the lowest column index
   //loop through each column
   for (int j=0;j<mat[i].length;j++)//note mat[i].length is number of cols for row i
   {
      //check if this column has the lowest value
      if(mat[i][j]<mat[i][min_j])
      {
        min_j=j;//set the new lowest index
      }
   }
   //print the index of the column with the lowest value for each row
   print(min_j+',');

}

希望这是一个很好的起点。您没有指出是否要打印出值,或者将它们存储在不同的数组中,以便将其保留为练习。

您已在评论中指出您希望每行的值最低而不是列。 代码:

double mat[][]={{...},{...}}//declare your 2d array

//loop through each column
for (int i=0;i<mat[i].length;i++)//note mat[i].length is number of columns in row i
{

   int min_j=0;//for each column reset the lowest row index
   //loop through each row
   for (int j=0;j<mat.length;j++)
   {
      //check if this row has the lowest value
      if(mat[j][i]<mat[min_j][i])
      {
        min_j=j;//set the new lowest index
      }
   }
   //print the index of the row with the lowest value for each column
   print(min_j+',');

}

答案 2 :(得分:0)

我做了一些修改,怎么样:

    class Main {
    public static void main(String[] args) {
        double twoDArr[][] = {
            {2, 3, 4, 6}, 
            {3, 6, 7, 3.3}, 
            {2.1, 3.4, 2, 7.7}
        };

        int row = 0;
        for(double element[] : twoDArr){

            int index = 0;
            double auxNum = 999999999.0;
            for(int i = 0; i < element.length; i++){
                if(element[i] < auxNum){
                    auxNum = element[i];
                    index = i;
                }
            }

            System.out.println("row: "+ row + " Smallest: " + auxNum + " Index: " + index);
            row++;
        }
    }
}

结果:

row: 0 Smallest: 2.0 Index: 0
row: 1 Smallest: 3.0 Index: 0
row: 2 Smallest: 2.0 Index: 2