如何检查数组是降序,升序还是未排序?
问题描述:
所以我的代码工作正常,如果数组升序或降序,只是当它没有排序,我碰到一个问题。它不会显示“未排序”,而会显示升序和降序。我该怎么办?如何检查数组是降序,升序还是未排序?
int[] array;
array= new int[]{1,5,6,11,55};
boolean answerDes= false;
boolean answerAsc= false;
for (int i=0; i<array.length-1; i++){
if(array[i]>array[i+1])
answerDes=true;
if(array[i]<array[i+1])
answerAsc=true;
}
if(answerDes)
System.out.println("Descending");
if(answerAsc)
System.out.println("Ascending");
if(!answerAsc && !answerDes)
System.out.println("Not sorted");
} }
答
内,您的for循环中,你比较只是两个值,可以这样考虑:
在未排序的数组,在一个点array[i]
可能比array[i+1]
更大,然后array[i]
可能小于array[i+1]
,这意味着answerDes
和answerAsc
将被设置为true
,这意味着它将在if语句中打印降序和升序,驯服他们。
例如:一个数组,它是:1,3,5,2,6,7]可以使您answerDes
和answerAsc
值都为true
也许考虑不同的阵列比较逻辑,然后比较了“没有排序'然后在else
陈述之后包括升序和降序比较,而不是使用全部if
陈述
请参阅this链接用于在C#中对数组进行排序。
PS尽量不要发明*:)
答
由于二者均为真当阵列是无序两个if
-statements通过,以避免这一点,你可以用如下图所示,在这里当一个更换comditional声明两者都是真实的,它会去else
声明
if(!answerDes)
System.out.println("Ascending");
else if(!answerAsc)
System.out.println("Descending");
else {
System.out.println("Not sorted");
}
}