Encontrar la matriz 2D max y min

Este es el original de comandos:

Encontrar el valor máximo y el valor mínimo en milesTracker. Asignar el valor máximo para maxMiles, y el valor mínimo a minMiles. Ejemplo de salida para el programa:

Min miles: -10 
Max miles: 40

Aquí está mi código:

import java.util.Scanner;

public class ArraysKeyValue {
  public static void main (String [] args) {   
    final int NUM_ROWS = 2;
    final int NUM_COLS = 2;
    int [][] milesTracker = new int[NUM_ROWS][NUM_COLS];
    int i = 0;
    int j = 0;
    int maxMiles = 0; 
    int minMiles = 0; 

    milesTracker[0][0] = -10;
    milesTracker[0][1] = 20;
    milesTracker[1][0] = 30;
    milesTracker[1][1] = 40;

    for(i=0;i<NUM_ROWS;++i) {

       for(j=0;j<NUM_COLS;++j) {

          if (milesTracker[i][j]<minMiles){
              minMiles = milesTracker[i][j]; 
          }
          else if (milesTracker[i][j] > maxMiles){
              maxMiles = milesTracker[i][j];
          }
       } 
    }

    System.out.println("Min miles: " + minMiles);
    System.out.println("Max miles: " + maxMiles);
  }
}

Aquí está el resultado:

  Testing with milesTracker = {{ -10, 20}, {30, 40}}

Su salida:

Min miles: -10
Max miles: 40

   Testing with milesTracker = {{73, 0}}

Su salida:

Min miles: 0
Max miles: 73

   Testing with milesTracker = {{ -5}, { -93}, { -259}}

Resultado esperado:

Min miles: -259
Max miles: -5

Su salida:

Min miles: -259
Max miles: 0

¿Por qué es la última prueba fallando?

InformationsquelleAutor java2019 | 2016-03-20

7 Kommentare

  1. 1

    Como una adición a @Fikolev la respuesta: Si sólo está permitido editar el bucle de órganos, puede mover la inicialización de allí:

    for(i=0;i<NUM_ROWS;++i) {
      for(j=0;j<NUM_COLS;++j) {
        if (i == 0 && j == 0) {
          maxMiles = Integer.MIN_VALUE; 
          minMiles = Integer.MAX_VALUE; 
        }
      ...
    • Donde en el bucle de órganos pongo este fragmento de código?
    • Ahora no pasa de la segunda prueba
    • ¿De incorporar todos los otros cambios? Y ¿qué es en la segunda prueba? Honestamente qué se puede esperar de nosotros para hacer tus tareas?
    • Si, yo he hecho los cambios exactos que usted hizo anteriormente; sin embargo, estoy en general confundido sobre cómo funciona y por qué no es el de superar las pruebas.
    • Me lo imaginé, creo que sólo había un pequeño error en alguna parte. Gracias por su ayuda. Lo siento a causar ningún tipo de molestia o frustración
  2. 5

    Usted necesita para inicializar los valores iniciales de manera diferente.

    int maxMiles = Integer.MIN_VALUE; 
    int minMiles = Integer.MAX_VALUE; 

    Inicialización de ambos a 0 conduce a problemas como se puede ver en el ejemplo sólo con valores negativos en la matriz. Si usted tiene sólo números positivos, minMiles permanecerá 0 y se equivoca como usted nunca va a conseguir un valor menor que el inicial 0.

    Para minValue usted necesita para asegurarse de que lo que usted tiene en la matriz es menor que el valor inicial, por lo tanto se le asigna el máximo valor posible del tipo de uso. Para maxValue es todo lo contrario.

    Otro posible error es el else if condición.

    if (milesTracker[i][j] < minMiles) {
        minMiles = milesTracker[i][j]; 
    } else if (milesTracker[i][j] > maxMiles) {
        maxMiles = milesTracker[i][j];
    }

    Estos dos no son mutuamente excluyentes. Lo que si se alcanza un número que es mayor que el de la actual maxMiles y más pequeño que el actual minMiles? Ciertamente puede suceder y usted va a fallar a la actualización de uno de ellos, en su caso – maxMiles.

    • El único lugar que puedo editar es donde el y bucles for anidados son
    • El programa no puede funcionar correctamente si usted no tiene permiso para editar los valores iniciales. He editado mi respuesta a aclarar.
  3. 1
    for (i = 0; i < NUM_ROWS; i++) {
        for (j = 0; j < NUM_COLS; j++) {
            if (i == 0 && j == 0) {
                maxMiles = milesTracker[i][j];
                minMiles = milesTracker[i][j];
            }
    
            if (milesTracker[i][j] > maxMiles) {
                maxMiles = milesTracker[i][j];
            }
    
            else if (milesTracker[i][j] < minMiles) {
                minMiles = milesTracker[i][j];
            }
    
        }
    }
  4. 0

    Aquí es lo que he usado.

     import java.util.Scanner;
    
    public class ArraysKeyValue {
       public static void main (String [] args) {
          final int NUM_ROWS = 2;
          final int NUM_COLS = 2;
          int [][] milesTracker = new int[NUM_ROWS][NUM_COLS];
          int i = 0;
          int j = 0;
          int maxMiles = 0; //Assign with first element in milesTracker before loop
          int minMiles = 0; //Assign with first element in milesTracker before loop
    
          milesTracker[0][0] = -10;
          milesTracker[0][1] = 20;
          milesTracker[1][0] = 30;
          milesTracker[1][1] = 40;
    
          /* Your solution goes here  */
          for (i = 0; i < NUM_ROWS; i++) {
    
             for (j = 0; j < NUM_COLS; j++) {
    
                if (i == 0 && j == 0) {
                   maxMiles = milesTracker[i][j];
                   minMiles = milesTracker[i][j];
                }
    
                   if (milesTracker[i][j] > maxMiles) {
                      maxMiles = milesTracker[i][j];
                   }
    
                   else if (milesTracker[i][j] < minMiles) {
                     minMiles = milesTracker[i][j];
                   }
    
                }
    
             }
    
          System.out.println("Min miles: " + minMiles);
          System.out.println("Max miles: " + maxMiles);
       }
    }
  5. 0

    Asignar con el primer elemento en milesTracker antes de bucle

    maxMiles = milesTracker[0][0];
    minMiles = milesTracker[0][0];
    
    for (i = 0; i < NUM_ROWS; i++) {     
        for (j = 0; j < NUM_COLS; j++) {
            if (milesTracker[i][j] > maxMiles) {
                maxMiles = milesTracker[i][j];            
            }
            if (milesTracker[i][j] < minMiles) {
               minMiles = milesTracker[i][j];  
            }
        }       
    }
  6. 0

    La respuesta de @Filkolev es muy bueno, pero puede ser incluso más corto:

    //The solution requires students to initialize max_miles (or maxMiles) or and min_miles (or minMiles) before writing their nested for loop. 
    maxMiles = milesTracker[0][0];
    minMiles = milesTracker[0][0];
    
    //loops
    for (i = 0; i <NUM_ROWS; ++i) {
        for (j = 0; j < NUM_COLS; ++j) {
            if (milesTracker[i][j] > maxMiles) {
                maxMiles = milesTracker[i][j];
            }
            else {
                minMiles = milesTracker[i][j];
            }
        }
    }
  7. -1

    Insertar la matriz de coordenadas antes de iniciar su bucles for:

    EX:

    minMiles=milesTracker[0][0];
    maxMiles=milesTracker[0][0];
    
    for(i...){max
        for(j...){min
    • Ya hay una respuesta que sugiere para inicializar estas dos variables. El uso razonable de los valores predeterminados. Su respuesta es no añadir nada de valor.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea