Java 使用循环检查数组的布尔值

Java 使用循环检查数组的布尔值,java,arrays,boolean,Java,Arrays,Boolean,为循环编写Java代码,该循环将布尔变量isOrdered设置为true(如果调用的给定int数组的元素是非降序的),否则将isOrdered设置为false inti[]={1,2,3,4,5}; int b=0; 布尔有序=假; 而(bi[b+1] 老实说,你可以让它工作在你如何将的顺序初始化为true和false的问题上。我会先将它初始化为true。然后,如果你在问题中发现一个带有false的谬误,那么这个想法就是打破你正在做的任何过程。请看我的例子以获得进一步的参考 迭代 boolean

为循环编写Java代码,该循环将布尔变量
isOrdered
设置为true(如果调用的给定int数组的元素是非降序的),否则将isOrdered设置为false

inti[]={1,2,3,4,5};
int b=0;
布尔有序=假;
而(b如果(i[0]否,则仅检查数组的第一个元素是否小于或等于至少一个元素-包括第一个元素本身,它将始终等于自身,将
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);
intarr[]={1,2,3,4,5};
int b=0;
布尔同序=真;
对于(int i=0;iarr[i+1])
{
无序=错误;
打破
}
b++;
}
out.println(按顺序排列);

让我们看看有什么问题

if (i[0] <= i[b])
您理解正确了吗?您真正需要的是检查
b之后的下一个值。

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

老实说,你可以让它工作在你如何将
的顺序初始化为true和false的问题上。我会先将它初始化为true。然后,如果你在问题中发现一个带有
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);
} 
递归的

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

这方面的递归方法是waaaaay cooler。

if(i[0]基于一次比较,如所说的
isOrdered=true
。这与所说的“如果排序不正确,则第0位和第b位的这对元素的排序正确”相同这是一个很好的例子,说明了一个有重点的、写得很好的问题。提示#2的原因不仅仅是一个优化。在问题的版本中,如果任何一个比较成功,结果都是正确的,但我想你只希望所有比较都成功,结果才是正确的。我的意思是“乐观”“先假设一个积极的结果,然后尝试寻找反例”;这与优化无关。这实际上不是一个递归解决方案,而是一个替代的迭代解决方案。尽管如此,我还是很喜欢。@AndyPerfect刚刚添加了一个递归解,OP要求迭代解决方案,所以我先做了:)
isOrdered==true
可以是
isOrdered
@Marcelo我总是被
=
赶上,我总是忘了。更新了好的捕获。你是说
如果(arr[I]>arr[I+1])
@Marcelo你是对的。在下降之前没有看到“不是”