因此,如果数组是升序或降序,我的代码工作正常,只是当它没有排序时我会遇到问题。它不会显示"未排序",而是显示升序和降序。我该怎么办?
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");
} }
答案 0 :(得分:1)
因为当数组都未排序时两者都为真,所以if
- 语句都会通过,为了避免这种情况,你可以用下面显示的语句替换条件语句,这里当两者都为真时它将转到{{ 1}}陈述
else
答案 1 :(得分:0)
在你的for循环中,你只是比较两个值,考虑一下:
在未排序的数组中,某一点array[i]
可能大于array[i+1]
,然后array[i]
可能小于array[i+1]
,这意味着两者{ {1}}和answerDes
将设置为answerAsc
,这意味着它将在包含它们的if语句中打印Descending和Ascending。
示例:一个数组:[1,3,5,2,6,7]可能会使您的true
和answerDes
值都为真
也许考虑不同的数组比较逻辑,然后首先比较“未排序”,然后在answerAsc
语句中包括升序和降序比较,而不是使用所有else
语句
请参阅this链接,以便在C#中对数组进行排序。
P.S尽量不发明轮子:)