【问题标题】:Trying to get the max/min in array试图获取数组中的最大值/最小值
【发布时间】:2012-03-14 12:53:02
【问题描述】:

我试图在最大值行的列中获取最小值。我试图使用 for 循环,但它不起作用。

假设一个矩阵 A:

3 4 5
2 3 4
1 2 3

我希望程序在第 [0] 行中找到最大值,然后在最大值的列中找到最小值。 所以结果应该是:第 [0] 行的最大值 = 5,第 [2] 列的最小值 = 3。 然后我希望它对所有行都执行相同的操作,这就是我使用 while 循环的原因。

这是矩阵:

public int[][] createMatrix(int a, int b){
    Scanner  inputm = new Scanner(System.in);
  A = new int[a][b];  
System.out.println("Enter elements for matrix A : ");
for (int i=0 ; i < A.length ; i++){
    System.out.println("Enter numbers for " + i +"th row");
for  (int j=0 ; j < A[i].length ; j++){
A[i][j] = inputm.nextInt();

    }

}
return A;
}

public int[][] displayMatrix(){
 System.out.println("Matrix A: ");

    for (int i=0 ; i < A.length ; i++)
    {     System.out.println();
        for  (int j=0 ; j < A[i].length ; j++){
            System.out.print(A[i][j]+" ");
              }
    }


return A;

}


public int getMaximumOfEveryRow (int c){ 
    a=c;
int i= 0;
int j;
 while(i < A[a].length){

    max = Integer.MIN_VALUE;
    for (  j = 0; j < A [ i ].length; j++ )
        if ( A [ i ] [ j ] > max ){
            max = A [ i ] [ j ];
        }



            for (  i = 0; i < A [ i ].length; i++ )// e
        if ( A [ i ] [ j ] < min ){
            min = A [ i ] [ j ];
        }

        System.out.println( "\n Maximum of row " + j + " = " + max );
    System.out.println( "Minimum of column " + i + " = " + min );        
    if(max == min){
    System.out.println( min+ " = " + max );
    System.out.println( "This is a saddle point. ");
    }




    i++;

 }     
return max;


}

这就是我目前所拥有的:

public int getMaximumOfEveryRow (int c){ 
    a=c;
int i= 0;
int j;
 while(i < A[a].length){

    max = Integer.MIN_VALUE;
    for (  j = 0; j < A [ i ].length; j++ )
        if ( A [ i ] [ j ] > max ){
            max = A [ i ] [ j ];
        }


    int e = j;  
    int r;
            for (  i = 0; i < A [ i ].length; i++ )// e
        if ( A [ i ] [ j ] < min ){
            min = A [ i ] [ j ];
        }

        System.out.println( "\n Maximum of row " + j + " = " + max );
    System.out.println( "Minimum of column " + i + " = " + min );        
    if(max == min){
    System.out.println( min+ " = " + max );
    System.out.println( "This is a saddle point. ");
    }




    i++;

 }     
return max;


}
public int getMaximumOfEveryColumn ()
{
for ( int i = 0; i < A.length; i++ )
{
    maxc = Integer.MIN_VALUE;
    for ( int j = 0; j < A [ i ].length; j++ )
        if ( A [ j ] [ i ] > maxc )
            maxc = A [ j ] [ i ];
    System.out.println( "Maximum of column " + i + " = " + maxc );
}
return maxc;
}

public int getMinimumOfEveryColumn_(){
for ( int i = 0; i < A.length; i++ )
{
    minc = Integer.MAX_VALUE;
    for ( int j = 0; j < A [ i ].length; j++ )
        if ( A [ j ] [ i ] < minc )
            minc = A [ j ] [ i ];
    System.out.println( "Minimum of column " + i + " = " + minc );
}
return minc;
}
public int getMaximumOfEveryRow ()
{
for ( int i = 0; i < A.length; i++ )
{
    maxr = Integer.MIN_VALUE;
    for ( int j = 0; j < A [ i ].length; j++ )
        if ( A [ i ] [ j ] > maxr )
            maxr = A [ i ] [ j ];
    System.out.println( "Maximum of row " + i + " = " + maxr );
}
return maxr;
}

用于在列中查找最大值,然后在该最大值所在的行中查找最小值的代码。

public void get_max_of_the_row_of_local_min ()
{
 for ( int i = 0; i < A.length; i++ )
 {
    min = Integer.MAX_VALUE;
    max = Integer.MIN_VALUE;
    int index_of_min_in_its_col = 0;



    //maxc = Integer.MIN_VALUE;
    for ( int j = 0; j < A [ i ].length; j++ )

        if ( A [ j ] [ i ] > max ){
            max = A [ j ] [ i ];
            index_of_min_in_its_col = i;
            System.out.println( " Maximum of col [" + i + "] = " + max);
        }

   for ( int j = 0; j < A [ index_of_min_in_its_col ].length; j++ )

        if ( A [ index_of_min_in_its_col ] [ index_of_min_in_its_col ] < min ){
            min = A [ index_of_min_in_its_col ] [ index_of_min_in_its_col ];
   a =j;
        }
    //System.out.print( " Maximum of col [" + j + "] = " + max);
    System.out.println( " Minimum of rol [" + index_of_min_in_its_col + "] = " + min );

    if(max == min){
    System.out.println("This is a saddle point.");
    }

 }

【问题讨论】:

  • 你能说明矩阵是如何定义的吗?它全部在一行中列出,因此不清楚第二行从哪里开始。
  • @HunterMcMillen 我刚刚编辑了它。
  • 什么是 A[a] ? a 是从哪里来的?
  • @ayokunleadeosun 改进了代码格式。如果您使用的是 eclipse - CTRL+SHIFT+F
  • @gt_ebuddy 抱歉,我使用的是 Netbeans。

标签: java arrays matrix max min


【解决方案1】:

解决办法如下:

public void get_minimum_of_the_column_of_local_maximum ()
{
    for ( int i = 0; i < A.length; i++ )
    {
        min = Integer.MAX_VALUE;
        max = Integer.MIN_VALUE;
        int index_of_maximum_in_its_row = 0;

        for ( int j = 0; j < A [ i ].length; j++ )
            if ( A [ i ] [ j ] > max )
                {
                    max = A [ i ] [ j ];
                    index_of_maximum_in_its_row = j;
                }

        for ( int j = 0; j < A [ index_of_maximum_in_its_row ].length; j++ )
            if ( A [ j ] [ index_of_maximum_in_its_row ] < min )
                min = A [ j ] [ index_of_maximum_in_its_row ];

        System.out.print( " Maximum of row [" + i + "] = " + max);
        System.out.println( " Minimum of column [" + index_of_maximum_in_its_row + "] = " + min );
    }
}

这段代码 sn-p 做了什么?

您有min = Integer.MAX_VALUE, max = Integer.MIN_VALUE 变量。我们将这些值分配给这些数字的原因是为了使找到最大/最小值成为可能。如何?最初min 具有最大的整数值,但只要我们找到一个小于它的值,我们就会更新我们的最小值,因此min 的值会减小。与 max 变量相同的技术,但当然它通过比较后的值增加而走向另一个方向。

第一个内部for循环确定行i的最大值,然后使用变量index_of_maximum_in_its_row标记该行中最大值的索引。需要稍后在第二个内循环中使用。

第二个内部循环确定列号index_of_maximum_in_its_row 的最小值,并对该列进行一次迭代。比方法打印结果。

【讨论】:

  • 谢谢,我也在尝试用它来查找列中的mac值,然后在行的行中查找最小值。如果可以的话,我会把它贴在这里但是我会编辑我的原件。
  • @ayokunleadeosun 如果您阅读我的帖子,我认为这是不言自明的。
【解决方案2】:

这是最简单的实现。

for(int i=0; i<arr.length ; i++){
    int columnNumber = getMaxElementsColumnNumber(arr,i); // i will represent row number
    int minElement = getMinimumElementInColumn(arr,columnNumber);
}

getMaxElementsColumnNumber() 将打印当前行中的最大数量并返回该元素的列号

getMinimumElementInColumn() 将遍历矩阵的列并返回该列中的最小元素。

您可以在同一个 for 循环中实现代码。这样你也可以检查鞍点。

【讨论】:

  • getMaxElementsColumnNumber() 和 getMinimumElementInColumn() 是静态的吗?
  • 这取决于编写此 for 循环的方法。如果该方法是静态的,您还需要将这两个方法设为静态。这只是一个示例代码,展示了可用于解决您的问题的逻辑。只要它们解决了问题,您就可以以任何适合您的方式实现这些方法。
猜你喜欢
  • 2010-11-23
  • 2011-08-16
  • 2017-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2021-02-14
  • 1970-01-01
相关资源
最近更新 更多