2016-02-18 4 views
0

Я новичок в Java, и я пытаюсь выяснить, почему мой метод не возвращает наибольшее значение во входном массиве. Моя идея - когда метод вызывается, петли for будут искать каждое значение массива. Затем он начинает устанавливать первое значение как самое большое значение, и любое значение, превышающее это значение, затем становится самым большим значением после этого.Возвращение наибольшего значения в массиве

Любая помощь очень ценится!

public double displayLargest (double[][] l) { 
    for (int x=0; x < l.length-1; x++) { 
     for (int y=0; y < l[x].length; y++) { 
      double w = l[0][0]; 
      if (w < l[x][y]) { 
       x++; 
       y++; 
       w = l[x][y]; 
       maxValue = w; 
      } 
     } 
    } 
    System.out.println("The largest value in the array is: " + maxValue); 
    return maxValue; 
} 
+0

Gawd, я ненавижу одиночные переменные символов, делает код настолько трудным для чтения! – pczeus

ответ

2

Следующий метод возвращает наибольшее значение в 2D входного массива double и он будет возвращать null, если значения не присутствуют.

public Double displayLargest(double[][] l){ 
    Double maxValue = null; 

    for (int x=0; x < l.length; x++) { 
     for (int y=0; y < l[x].length; y++) { 

      if (maxValue == null || maxValue < l[x][y]) { 
       maxValue = l[x][y]; 
      } 
     } 
    } 

    System.out.println("The largest value in the array is: " + maxValue); 

    return maxValue; 
} 
0
double max = l[0][0]; 
//two loops here 
if(max < l[x][y])//inside two loops 
{ 
    max = l[x][y] 
} 

Вы всегда назначая первое значение массива ж, вы должны объявить его перед любыми петлями. В противном случае вы всегда сравниваете значение с l [0] [0].

0

Я дал простой способ сделать это.

int[][] array2 = 
    {{1, 2, 3, 4, 5}, 
    {6, 7, 8, 9, 10}, 
    {11, 12, 13, 14, 15}, 
    {16,17,18,19}}; 
     int result = Arrays.stream(array2) 
    .flatMapToInt(h2 -> Arrays.stream(h2)) 
    .min() 
    .getAsInt(); 
     System.out.println(result); 

это макс

int[][] array2 = 
    {{1, 2, 3, 4, 5}, 
    {6, 7, 8, 9, 10}, 
    {11, 12, 13, 14, 15}, 
    {16,17,18,19}}; 
     int result = Arrays.stream(array2) 
    .flatMapToInt(h2 -> Arrays.stream(h2)) 
    .max() 
    .getAsInt(); 
     System.out.println(result); 
0

Я сильнорекомендую вы начать с содержательными именами переменными. Затем я настоятельно рекомендую вам предпочесть for-each loop по сравнению с традиционным циклом for (особенно когда вы устанавливаете петли). Наконец, я бы по умолчанию до NaN таким образом, вы можете обрабатывать null и пустые массивы. Что-то вроде,

public static double displayLargest(double[][] arrayOfArray) { 
    double maxValue = Double.NaN; 
    if (arrayOfArray != null) { 
     for (double[] array : arrayOfArray) { // <-- for each array in arrayOfArray 
      for (double value : array) {  // <-- for each value in the array 
       if (!Double.isNaN(maxValue)) { 
        maxValue = Double.max(maxValue, value); 
       } else { // <-- the first value. 
        maxValue = value; 
       } 
      } 
     } 
    } 
    System.out.println("The largest value in the array is: " + maxValue); 
    return maxValue; 
} 
+0

@ScaryWombat Сам массив является объектом. Массив может иметь значение NULL, и в этом случае внутренний массив может быть нулевым. –

+0

Да, я вижу вашу мысль. –

Смежные вопросы