繁体   English   中英

Java如何将数组拆分为两个不同的数组,然后在数组中添加一个数字

[英]Java How to split array into two different arrays, and then add a number to the arrays

我有一个未知大小的数组,我只知道我只有奇数大小的数字。

我需要能够检查数组的前半部分是否逐渐向中心值(最大值)增长,而在中心值之后,数字的值逐渐变低。

我认为最好的方法是拆分数组的长度,但是因为它是一个奇数,所以我需要将 0.5 添加到数组中,这似乎是不可能的。

int N = Integer.parseInt(args[0]);

int[] array = new int[N];

int x = array.length;

//split into new arrays
int[] a = new int [x/2];
int[] b = new int [x/2];

if(a<b && b<c){
    System.out.println("Has a peak");
} else {
    System.out.println("Doesnt have a peak"); 
}

中心值不需要在子数组之一中。 如果原始值是 N=11,那么您可以将事物拆分为 5-1-5。 但正如 Bob Brinks 的评论所说,实际上没有必要创建单独的数组,您只需要使用整数作为适当的索引,并循环遍历数组本身并检查每个单元格是否遵循规则。 在循环之前将名为“ok”的 bool 设置为 true,如果任何数组索引未通过测试,则将其设置为 false。

中心单元将始终位于数组 [N/2](N/2 始终向下舍入)。 您可以检查从 array[1] 到 array[N/2] 的每个单元格,并确保每个单元格都比之前的大。 然后你有第二个循环,它查看从 array[N/2+1] 到 array[N-1] 的每个单元格,并检查每个单元格是否小于之前的单元格。 然后在循环之后,您会看到“ok”是否仍然为真,在这种情况下,没有一个单元格违反规则。

要注意的主要事情是每次通过循环打印单元格索引并确保它们都以正确的顺序(起点和终点)被触发,如果不是,那么你的方式有问题写了你的 FOR 循环,另一件事是是否允许连续两个相等的值。 使用 >= 和 <= 进行比较检查是否是这种情况。 随时打印值真的是您的朋友:在程序的调试版本中,打印出数组的长度、循环索引等,基本上是您可以识别的任何值。 它使注意到“嘿这里有问题”并更容易了解所有程序结构的工作原理。

试试这个功能。 它接受一个数组作为参数,如果数组包含一个峰值(根据你的解释),则返回true如果没有,则返回false -

public static boolean isPeak(int[] array){
    int length = array.length;
    int prev=array[0];
    for(int index=1;index<length;index++){
        if(index<length/2+1){
            if(array[index] < prev){
                return false;
            } else {prev=array[index];}
        } else {
            if(array[index] > prev){
                return false;
            } else {prev=array[index];}
        }
    }
    return true;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM