2

为循环编写 Java 代码,isOrdered如果调用的给定整数数组的元素按非递减顺序设置布尔变量为 true,否则将 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);

我这样做正确吗?

4

3 回答 3

3

让我们看看有什么问题。

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

这是您的代码困扰我的主要领域。您如何检查下一个值是否更低/更高,然后i[b]您仅将索引零处的值与索引 b 进行比较!

本质上,您的代码在循环中看起来像这样。

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

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

你看对了吗?你真正需要的是在之后检查下一个值b.

所以代码看起来像i[b] > i[b+1]

老实说,您可能可以让它在您如何初始化isOrderedtrue 和 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);
} 

递归方法是waaaaaaaaaaycooler

于 2013-09-18T20:37:30.963 回答
0

不; 您只检查数组的第一个元素是否小于或等于至少一个元素 - 包括第一个元素本身,它将始终等于自身,无论其余元素是什么,都设置isOrdered为。true

提示#1:您应该将除第一个元素之外的每个元素与紧接在它之前的元素进行比较。

提示#2:您应该乐观并假设数组是有序的,然后搜索反例。一旦你发现一对违反顺序的元素,设置isOrdered为 false 并跳出循环。

于 2013-09-18T20:26:13.127 回答
0

对数组的大小执行 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);
于 2013-09-18T20:32:02.567 回答