Java 排序数组。第一个元素是数组的长度

Java 排序数组。第一个元素是数组的长度,java,arrays,java.util.scanner,Java,Arrays,Java.util.scanner,问题: 如果列表已按递增顺序排序,则编写以下返回true的方法。publicstaticbooleanissorted(int[]list)编写一个测试程序,提示用户输入列表并显示列表是否已排序。下面是一个运行示例。请注意,输入中的第一个数字表示列表中元素的数量 我的尝试: import java.util.Scanner; public class Problem6_19 { public static void main(String[] args) { Scann

问题: 如果列表已按递增顺序排序,则编写以下返回true的方法。publicstaticbooleanissorted(int[]list)编写一个测试程序,提示用户输入列表并显示列表是否已排序。下面是一个运行示例。请注意,输入中的第一个数字表示列表中元素的数量

我的尝试:

import java.util.Scanner;

public class Problem6_19 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.println("Enter a number.  for the length of the list: ");
        int listLength = input.nextInt();
        int[] number = new int[listLength];

        for(int i = 0; i < number.length; i++) {
            System.out.println("Enter a value: ");
            number[i] = input.nextInt();
        }

        if (isSorted(number)) {
            System.out.println("The list is sorted!");
        } else {
            System.out.println("The list is NOT sorted!");
        }

    }

    public static boolean isSorted(int[]  list) {

        for(int i = 0; i < list.length; i++) {
            if (list[i] > list[i + 1]) {
                return false;
            } else {
                return true;
            }
        }
        return false;
    }

}
import java.util.Scanner;
公共课问题6_19{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
System.out.println(“为列表的长度输入一个数字:”);
int listLength=input.nextInt();
int[]编号=新的int[listLength];
for(int i=0;i列表[i+1]){
返回false;
}否则{
返回true;
}
}
返回false;
}
}

但有一个问题。在问题中,它会提示用户输入列表,第一个元素是该列表的长度。这意味着我们只需要提示用户一次。因此,请解释第一个元素如何成为数组的大小???

Scanner类默认使用空格,即任何空格作为标记之间的分隔符。这意味着,如果用户在输入数字之间按return键,则您需要处理该情况并向用户请求另一个数字,否则最终用户将只是在一条新的线路上,不知道该做什么。如果用户在输入数字之间未按return键,而是用空格分隔数字,例如:

123445

然后,扫描器将该标记分为5个单独的标记,当您调用nextInt()时,这些标记将一次返回一个

如果运行程序并输入以下内容:

4 2 1 3 4

它应该会提出四个问题,要求您输入inout(您已经给它了),然后执行您想要的功能并打印“列表未排序!”

另外,这个程序并不像我想象的那样工作,因为它只检查前两个值是否按升序排列,然后返回。相反,您应该检查前两个是否正确,设置一个标志以跟踪它们(如果正确),然后在不退出的情况下继续循环。或者仅在列表未排序的情况下返回,如果检查完数组且尚未退出,则必须对其进行排序,因此应返回true(如下面的代码示例所示)。return语句强制方法在到达该行时立即退出,而不必经过整个循环。在尝试访问i+1之前,还应该检查是否脱离了阵列的末尾。差不多

import java.util.Scanner;

public class ScannerClass {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.println("Enter a number.  for the length of the list: ");
        int listLength = input.nextInt();
        int[] number = new int[listLength];

        for(int i = 0; i < number.length; i++) {
            System.out.println("Enter a value: ");
            number[i] = input.nextInt();
        }

        if (isSorted(number)) {
            System.out.println("The list is sorted!");
        } else {
            System.out.println("The list is NOT sorted!");
        }

    }

    public static boolean isSorted(int[]  list) {
        for(int i = 0; i < list.length - 1; i++) {
            if (list[i] > list[i + 1]) {
                return false
            }
        }
        return true;
    }

}
import java.util.Scanner;
公共级扫描级{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
System.out.println(“为列表的长度输入一个数字:”);
int listLength=input.nextInt();
int[]编号=新的int[listLength];
for(int i=0;i列表[i+1]){
返回错误
}
}
返回true;
}
}

查看您的代码
阵列索引边界外异常
浮现在我脑海中。(
list[i+1]
以及可能的
i==list.length-1
)此外,您正在检查
数组
而不是
list
,因此数组的大小是固定的。例如,如果用户输入8 10 1 5 16 61 9 11 1,则8将是其长度。如何在代码中执行此步骤??如果用户输入了4 1 3 4 5,那么4将是其长度。如何在代码中编写此项?您的
isSorted
方法是错误的。循环将只执行一次。如果您有
12354
?您需要去掉
else{return true;}