2009-11-27 26 views
17

Por alguna razón, este código imprime tres valores para el valor más alto en la matriz cuando estoy tratando de imprimir solo uno (que es 11.3). ¿Puede alguien explicarme por qué está haciendo esto?Java: Encontrar el valor más alto en una matriz

Gracias.

import java.util.Scanner; 

public class Slide24 
{ 
    public static void main (String [] args) 
    { 
     Scanner in = new Scanner(System.in); 

     double[] decMax = {-2.8, -8.8, 2.3, 7.9, 4.1, -1.4, 11.3, 10.4, 
      8.9, 8.1, 5.8, 5.9, 7.8, 4.9, 5.7, -0.9, -0.4, 7.3, 8.3, 6.5, 9.2, 
      3.5, 3, 1.1, 6.5, 5.1, -1.2, -5.1, 2, 5.2, 2.1}; 

     double total = 0, avgMax = 0; 

     for (int counter = 0; counter < decMax.length; counter++) 
     { 
     total += decMax[counter]; 
     } 

     avgMax = total/decMax.length; 

     System.out.printf("%s %2.2f\n", "The average maximum temperature for December was: ", avgMax); 

     //finds the highest value 
     double max = decMax[0]; 

     for (int counter = 1; counter < decMax.length; counter++) 
     { 
     if (decMax[counter] > max) 
     { 
      max = decMax[counter]; 
      System.out.println("The highest maximum for the December is: " + max); 
     } 

     }   
    } 
} 
+1

Collections.max (arrayList) .toInt() –

Respuesta

27

Está imprimiendo un número cada vez que encuentra uno que es más alto que el máximo actual (que sucede tres veces en su caso). Mueva la impresión fuera del ciclo for y debería estar bien.

for (int counter = 1; counter < decMax.length; counter++) 
{ 
    if (decMax[counter] > max) 
    { 
     max = decMax[counter]; 
    } 
} 

System.out.println("The highest maximum for the December is: " + max); 
6

lo necesario para imprimir el máximo después de haber explorado todas ellas:

for (int counter = 1; counter < decMax.length; counter++) 
{ 
    if (decMax[counter] > max) 
    { 
     max = decMax[counter]; 
     // not here: System.out.println("The highest maximum for the December is: " + max); 
    } 
} 
System.out.println("The highest maximum for the December is: " + max); 
1

Usted tiene su de impresión() comunicado en el bucle for(), Debe ser después para que solo se imprima una vez. tal como es actualmente, cada vez que el máximo cambia imprime un max.

17

Para encontrar el valor más alto (máximo) o más bajo (mínimo) de una matriz, esto podría darle la dirección correcta. Aquí hay un código de ejemplo para obtener el valor más alto de una matriz primitiva.

Método 1:

public int maxValue(int array[]){ 
    List<Integer> list = new ArrayList<Integer>(); 
    for (int i = 0; i < array.length; i++) { 
    list.add(array[i]); 
    } 
return Collections.max(list); 

}

para obtener el valor más bajo, se puede utilizar

Collections.min(list)

Método 2:

public int maxValue(int array[]){ 
    int max = Arrays.stream(array).max().getAsInt(); 
    return max; 
} 

Ahora la siguiente línea debería funcionar.

System.out.println("The highest maximum for the December is: " + maxValue(decMax));
+0

Para Java 8, Procedimiento 2 es muy práctico. –

+0

¿Cuál es el buen rendimiento sabio? –

+0

Estas también son la solución correcta y buena, pero no la más eficiente. La respuesta aceptada es la forma ** más eficiente ** de encontrar el elemento más alto en la matriz. –

4

Si usted está buscando la manera más rápida y sencilla de realizar varias acciones en lo que respecta a las matrices, el uso de la clase Collections es extremadamente útil (documentación disponible de https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html), las acciones varía de encontrar el máximo, mínimo , la clasificación, el orden inverso, etc.

Una forma sencilla de encontrar el valor máximo de la matriz con el uso de las colecciones:

Double[] decMax = {-2.8, -8.8, 2.3, 7.9, 4.1, -1.4, 11.3, 10.4, 8.9, 8.1, 5.8, 5.9, 7.8, 4.9, 5.7, -0.9, -0.4, 7.3, 8.3, 6.5, 9.2, 3.5, 3.0, 1.1, 6.5, 5.1, -1.2, -5.1, 2.0, 5.2, 2.1}; 
List<Double> a = new ArrayList<Double>(Arrays.asList(decMax)); 
System.out.println("The highest maximum for the December is: " + Collections.max(a)); 

Si usted está interesado en encontrar el valor mínimo, similar a la búsqueda m Aximum:

System.out.println(Collections.min(a)); 

La línea más simple para ordenar la lista:

Collections.sort(a); 

O, alternativamente, el uso de la clase Arrays para ordenar una matriz:

Arrays.sort(decMax); 

Sin embargo la clase Arrays no lo hace tener un método que se refiere directamente al valor máximo, ordenarlo y referirse al último índice es el valor máximo; sin embargo, tenga en cuenta ordenar por los 2 métodos anteriores tiene una complejidad de O (n log n).

5

Igual que el sugerido por otros, la sola mención de la forma más limpia de hacerlo:

int max = decMax[0]; 
for(int i=1;i<decMax.length;i++) 
    max = Math.max(decMax[i],max); 
System.out.println("The Maximum value is : " + max); 
0

Una solución más corto que tienen el valor máximo de la matriz:

double max = Arrays.stream(decMax).max(Double::compareTo).get(); 
0

Se puede utilizar una función que acepta una matriz y encuentra el valor máximo en ella. lo hice genérica por lo que también podría aceptar otros tipos de datos

public static <T extends Comparable<T>> T findMax(T[] array){  
    T max = array[0]; 
    for(T data: array){ 
     if(data.compareTo(max)>0) 
      max =data;     
    } 
    return max; 
} 
0

Se puede escribir como este.

import java.util.Scanner; 
class BigNoArray{ 

    public static void main(String[] args){ 
     Scanner sc = new Scanner(System.in); 
     System.out.println("Enter how many array element"); 
     int n=sc.nextInt(); 
     int[] ar= new int[n]; 
     System.out.println("enter "+n+" values"); 
     for(int i=0;i<ar.length;i++){ 
      ar[i]=sc.nextInt(); 
     } 
     int fbig=ar[0]; 
     int sbig=ar[1]; 
     int tbig=ar[3]; 
      for(int i=1;i<ar.length;i++){ 
       if(fbig<ar[i]){ 
        sbig=fbig; 
        fbig=ar[i]; 
       } 
       else if(sbig<ar[i]&&ar[i]!=fbig){ 
        sbig=ar[i]; 
       } 
       else if(tbig<ar[i]&&ar[i]!=fbig){ 
        tbig=ar[i]; 
       } 
      } 
     System.out.println("first big number is "+fbig); 
     System.out.println("second big number is "+sbig); 
     System.out.println("third big number is "+tbig); 
    } 
} 
0
void FindMax() 
{ 
    int lessonNum; 

    System.out.print("Enter your lesson numbers : "); 
    lessonNum = input.nextInt(); 
    int[] numbers = new int[lessonNum]; 
    for (int i = 0; i < numbers.length; i++) 
    { 
     System.out.print("Please enter " + (i + 1) + " number : "); 
     numbers[i] = input.nextInt(); 
    } 
    double max = numbers[0]; 
    for (int i = 1; i < numbers.length; i++) 
    { 
     if (numbers[i] > max) 
     { 
      max = numbers[i]; 
     } 
    } 
    System.out.println("Maximum number is : " + max); 
} 
0

Usted está Basta con comparar elemento de orden cero con el resto de los elementos, lo que imprimirá el valor último valor más grande, que contendrá, en que caso, el mismo problema que está sucediendo. Para comparar cada uno y todos los elementos que tenemos que cambiar los valores como:

double max = decMax[0]; 
    for (int counter = 1; counter < decMax.length; counter++){ 
     if(max<decMax[i]){ 
      max=decMax[i]; //swapping 
      decMax[i]=decMax[0]; 
     } 
    } 
    System.out.println("The max value is "+ max); 

Hope esto le ayudará a

Cuestiones relacionadas