Пытаясь получить максимум / мин в массиве - PullRequest
1 голос
/ 24 февраля 2012

Я пытаюсь получить минимальное значение в столбце в строке максимального значения. Я пытаюсь использовать для петель, но это не работает.

Допустим, матрица 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.");
    }

 }

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

Вот решение:

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 );
    }
}

Что делает этот фрагмент кода?

У вас есть 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 с одной итерацией по этому столбцу.Чем метод печатает результаты.

0 голосов
/ 24 февраля 2012

Это самая простая реализация.

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. Таким образом, вы также можете проверить седловую точку.

...