如何在java中比较数组中的元素?

时间:2017-02-12 09:00:23

标签: java arrays

我需要找到" Valleys"和" Peaks"数组中的数字。 "谷"和" Peaks"几乎意味着我需要将每个索引与它周围的两个索引进行比较。因此,如果中间索引大于它周围的索引,那么它的峰值为#34;但是如果中间的索引小于它周围的两个索引,那么它的a" Valley" 。我必须为下面显示的每个数组行上的每个数字执行此操作:

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

我尝试使用if和else if但是最小的数组转到索引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, ");
    }
  }
}

我被困在接下来要做的事情上?我对数组很新,观看了一些视频,但仍然无法弄清楚如何做到这一点。

1 个答案:

答案 0 :(得分: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个循环。数组中的第一个数组,第二个数组中的项目。您必须为数组中的第一个和最后一个项创建一个特殊条件,因为它们没有2个邻居。其余的只是将每个项目与之前和之后的项目进行比较。