簡體   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