2017-02-12 10 views
0

Мне нужно найти «Долины» и «Пики» чисел в массиве. «Долины» и «Пики» в значительной степени означают, что мне нужно сравнить каждый индекс с двумя индексами вокруг него. Поэтому, если средний индекс больше, чем индексы вокруг него, его «пик», но если индекс в середине меньше, чем два индекса вокруг него, это «Долина». Я должен сделать это для каждого числа в каждой строке массива показано ниже:Как сравнить элементы в массиве в java?

int[][] arrays = { 
     { 2, 5, 3, 2, 1, 9, 7, 8, }, 
     { 4, 4, 7, 4, 2, }, 
     { 2, 5, 3, 3, 7, 2, }, 
     { 1, 9, 3, 5, 2, 7, 3, 5, 1 }, 
     { 2, 8, 8, 7, 9, 9, 9, 3 }, 
     { 4, 3, 2, 1, 0, }, 
     { 1, 2, 5, 9, 10, }, 
    }; 

я попытался использовать, если и еще если, но наименьший массив переходит к индексу 4, и если я пытаюсь использовать более высокие показатели код не будет работать должным образом. Вот моя попытка:

public class ValleyPeak { 

public static void main(String[] args) { 
    int[][] arrays = { 
     { 2, 5, 3, 2, 1, 9, 7, 8, }, 
     { 4, 4, 7, 4, 2, }, 
     { 2, 5, 3, 3, 7, 2, }, 
     { 1, 9, 3, 5, 2, 7, 3, 5, 1 }, 
     { 2, 8, 8, 7, 9, 9, 9, 3 }, 
     { 4, 3, 2, 1, 0, }, 
     { 1, 2, 5, 9, 10, }, 
    }; 

    for (int i = 0; i < arrays.length; i++) 
    valley_peak(arrays[i]); 

} 

static void valley_peak(int[] a) { 
    System.out.print("\narray: \n"); 
    //1 
    if(a[0] > a[1]){ 
     System.out.println("[0] is a peak, "); 
    } 
    else if(a[0] < a[1]){ 
     System.out.println("[0] ia a valley, "); 
    } 
    //2 
    if(a[1] > a[0] && a[1] > a[2]){ 
     System.out.println("[1] ia a peak, "); 
    } 
    else if(a[1] < a[0] && a[1] < a[2]){ 
     System.out.println("[1] ia a valley, "); 
    } 
    //3 
    if(a[2] > a[1] && a[2] > a[3]){ 
     System.out.println("[2] ia a peak, "); 
    } 
    else if(a[2] < a[1] && a[2] < a[3]){ 
     System.out.println("[2] ia a valley, "); 
    } 
    //4 
    if(a[3] > a[2] && a[3] > a[4]){ 
     System.out.println("[3] ia a peak, "); 
    } 
    else if(a[3] < a[2] && a[3] < a[4]){ 
     System.out.println("[3] ia a valley, "); 
    } 
    //4 
    if(a[4] > a[3] && a[4] > a[5]){ 
     System.out.println("[4] ia a peak, "); 
    } 
    else if(a[4] < a[3] && a[4] < a[5]){ 
     System.out.println("[4] ia a valley, "); 
    } 
    //5 
    if(a[5] > a[4] && a[5] > a[6]){ 
     System.out.println("[5] ia a peak, "); 
    } 
    else if(a[5] < a[4] && a[5] < a[6]){ 
     System.out.println("[5] ia a valley, "); 
    } 
    //6 
    if(a[6] > a[5] && a[6] > a[7]){ 
     System.out.println("[6] ia a peak, "); 
    } 
    else if(a[6] < a[5] && a[6] < a[7]){ 
     System.out.println("[6] ia a valley, "); 
    } 
    //7 
    if(a[7] > a[6] && a[7] > a[8]){ 
     System.out.println("[7] ia a peak, "); 
    } 
    else if(a[7] < a[6] && a[7] < a[8]){ 
     System.out.println("[7] ia a valley, "); 
    } 
    //8 
    if(a[8] > a[7] && a[8] > a[9]){ 
     System.out.println("[8] ia a peak, "); 
    } 
    else if(a[8] < a[7] && a[8] < a[9]){ 
     System.out.println("[8] ia a valley, "); 
    } 
    //9 
    if(a[9] > a[8] && a[9] > a[10]){ 
     System.out.println("[9] ia a peak, "); 
    } 
    else if(a[9] < a[8] && a[9] < a[10]){ 
     System.out.println("[9] ia a valley, "); 
    } 
    } 
} 

Я застрял на том, что я должен делать дальше? Я довольно новичок в массивах, смотрел несколько видеороликов, но до сих пор не могу понять, как это сделать.

+0

Вам необходимо использовать петлю. У вас уже есть цикл в 'main()'. Используйте другой в своем процессоре. Вы, например, нигде не проверяете, есть ли 'a [10]' на самом деле или если 'a.length <9'. –

ответ

0

Так эта программа должна решить проблему

public class Array { 

    public static void main(String[] args) { 
     int[][] arrays = { 
       { 2, 5, 3, 2, 1, 9, 7, 8, }, 
       { 4, 4, 7, 4, 2, }, 
       { 2, 5, 3, 3, 7, 2, }, 
       { 1, 9, 3, 5, 2, 7, 3, 5, 1 }, 
       { 2, 8, 8, 7, 9, 9, 9, 3 }, 
       { 4, 3, 2, 1, 0, }, 
       { 1, 2, 5, 9, 10, }, 
     }; 

     for(int i = 0; i < arrays.length; i++) { 
      int[] array = arrays[i]; 

      System.out.println("array: " + i); 

      //Edge case first item of array 
      if(array[0] > array[1]) { 
       System.out.println("[0] is peak"); 
      } 
      else if(array[0] < array[1]) { 
       System.out.println("[0] is valley"); 
      } 

      // loop for all items in the middle of the array 
      for(int j = 1; j < array.length - 2; j++) { 
       if(array[j-1] < array[j] && array[j+1] < array[j]) { 
        System.out.println("[" + j + "] is peak"); 
       } 
       else if(array[j-1] > array[j] && array[j+1] > array[j]) { 
        System.out.println("[" + j + "] is valley"); 
       } 
      } 

      //Edge case last item of array 
      int indexLastItem = array.length - 1; 

      if(array[indexLastItem] > array[indexLastItem - 1]) { 
       System.out.println("[" + indexLastItem + "] is peak"); 
      } 
      else if(array[indexLastItem] < array[indexLastItem - 1]) { 
       System.out.println("[" + indexLastItem + "] is valley"); 
      } 


     } 

    } 

} 

Таким образом, вы используете 2 петли. Первый для массива в массивах, второй для элемента в массиве. Вы должны сделать специальное условие для первого и последнего элемента массива, потому что у них нет двух соседей. Для остальных вы просто сравниваете каждый предмет с тем, который был до и после него.

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