簡體   English   中英

帶循環的布爾值,用於檢查數組

[英]Boolean with loops to check an array

如果給定的int數組的元素的順序為非降序,請為將布爾變量isOrdered為true的循環編寫Java代碼,否則將isOrdered設置為false。

int i[] = { 1, 2, 3, 4, 5 };
int b = 0;
boolean isOrdered = false;
while (b < i.length) {
    if (i[0] <= i[b]) {
        isOrdered = true;
    }
    b++;
}
out.println(isOrdered);

我這樣做正確嗎?

讓我們看看有什么問題。

if (i[0] <= i[b])

這是困擾您代碼的主要方面。 您如何檢查下一個值是否比i[b]高/低,您僅將索引0的值與索引b的值進行比較!

本質上,您的代碼看起來像是在循環中。

/ w int i[] = { 1, 2, 3, 4, 5 };

i[0] i[b]
1     1
1     2
1     3
...

你看對圖片嗎? 您真正需要的是檢查b.之后的下一個值b.

因此代碼看起來像i[b] > i[b+1]

老實說,您可能可以使它對如何將isOrdered的順序初始化為true和false isOrdered 我首先將其初始化為true。 然后的想法是,如果您在問題中發現一個帶有false.的謬論,那就擺脫您正在做的任何事情false. 請查看我的示例以獲取更多參考

迭代

boolean isOrdered = true;

while(isOrdered && array.length - 1 > b){
     if(array[b] > array[b+1]) isOrdered = false;
     b++;
}

遞歸

boolean isOrdered(int[] array, index){
    if(index == array.length - 1) return true;
    if(array[index] > array[index + 1]) return false;
    return isOrdered(array, index + 1);
} 

遞歸方法是waaaaaaaaaay cooler。

沒有; 您只是在檢查數組的第一個元素是否小於或等於至少一個元素-包括第一個元素本身(將始終等於其自身),無論其余元素是什么,都將isOrdered設置為true

提示#1:您應該將除第一個元素之外的每個元素與緊接其前的元素進行比較。

提示2:您應該樂觀,並假設數組是有序的,然后搜索一個反例。 一旦發現一對違反順序的元素,請將isOrdered設置為false並退出循環。

對數組的大小執行for循環,以檢查下一項是否小於當前項:

   int arr[] = { 1, 2, 3, 4, 5 };
    int b = 0;
    boolean isOrdered = true;
    for (int i = 0; i< arr.length - 1 ; i ++) {
        if (arr[i] > arr[i+1])
        {
            isOrdered = false;
            break;
        }
        b++;
    }
    out.println(isOrdered);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM