[英]why will my code not return false if the array is not descending or ascending order?
public class SmallestLargest {
public static void main(String[] args) {
int [] arr = {3,6,2,1,23,6,7,54,3,2};
System.out.println(isIncreasing(arr));
}
public static boolean isIncreasing(int[]arr)
{
for(int i=1; i<arr.length;i++)
{
if(arr[i] > arr[i+1] || arr[i] < arr[i+1] )
return true;
}
return false;
}
}
因此,如果數組為int [] arr = {1,2,3},則它應返回true,如果其降序也應為true,否則它應返回false,但我的輸出始終為true。
如果要檢查陣列是否在分配中,則必須更改檢查:
public class SmallestLargest {
public static void main(String[] args) {
int [] arr = {3,6,2,1,23,6,7,54,3,2};
System.out.println(isIncreasing(arr));
}
public static boolean isIncreasing(int[]arr)
{
for(int i=0; i<arr.length-1;i++)
{
if( arr[i] > arr[i+1] )
return false;
}
return true;
}
}
並且您的循環必須at arr.length-1
結尾at arr.length-1
您將獲得ArrayIndexOutOfBoundsException
。
而且您必須從0開始,因為Java中的數組基於零。
問題是,只要您擁有一個小於另一個值的值,您的代碼就會返回true。 您的代碼應如下所示。
public class SmallestLargest {
public static void main(String[] args) {
int [] arr = {3,6,2,1,23,6,7,54,3,2};
System.out.println(isIncreasing(arr));
}
public static boolean isIncreasing(int[]arr)
{
for(int i=0; i<arr.length - 1;i++)
{
if(arr[i] > arr[i+1]){
return false;
}
}
return true;
}
}
如果數組已排序-升序或降序,則返回true。 它還可以處理數組的平坦部分,其中所有條目都是平坦的,一個條目卻沒有條目。
是否對空數組排序是有爭議的。
public enum Direction {
Descending {
@Override
boolean is(int a, int b) {
return b <= a;
}
},
Ascending {
@Override
boolean is(int a, int b) {
return a <= b;
}
};
abstract boolean is(int a, int b);
}
public static boolean isSorted(int[] n) {
// All possible directions.
Set<Direction> possibles = EnumSet.<Direction>allOf(Direction.class);
for (int i = 0; i < n.length - 1 && possibles.size() > 0; i++) {
// Check all currently possible directions.
for (Iterator<Direction> it = possibles.iterator(); it.hasNext();) {
Direction d = it.next();
if (!d.is(n[i], n[i + 1])) {
// Not in that direction.
it.remove();
}
}
}
return possibles.size() > 0;
}
public void test(int[] arr) {
System.out.println(Arrays.toString(arr) + " is " + (!isSorted(arr) ? "not " : "") + "sorted");
}
public void test() {
test(new int[]{3, 6, 2, 1, 23, 6, 7, 54, 3, 2});
test(new int[]{3, 4, 5, 6, 7, 8, 9});
test(new int[]{3, 4, 4, 4, 5, 6, 7, 9});
test(new int[]{4, 4, 4, 4});
test(new int[]{1});
test(new int[]{});
test(new int[]{100, 50, 25, 12, 6, 3, 1});
}
試試看:
boolean status=false;
public static boolean isIncreasing(int[]arr)
{
for(int i=0; i<arr.length-1;i++)
{
if(arr[i] > arr[i+1] || arr[i] < arr[i+1] )
status=true;
else
return false;
}
return true;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.