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

时间:2015-05-14 13:46:37

标签: java arrays java.util.scanner

问题: 排序?)编写以下方法,如果列表已按递增顺序排序,则返回true。 public static boolean isSorted(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;
    }

}

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

1 个答案:

答案 0 :(得分:0)

默认情况下,Scanner类使用空格(任何空格)作为标记之间的分隔符。这意味着如果用户在输入数字之间按下返回,则需要处理该情况并向用户询问另一个号码,或者最终用户只是在新线路上而不知道该怎么做。如果用户在输入数字之间没有按回车,而是用空格分隔,例如:

1 2 3 4 5

然后扫描程序会将其分成5个单独的标记,当您调用nextInt()时,这些标记将一次返回。

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

4 2 1 3 4

它应该输出四个问题,要求你输入inout(你已经给它)但是然后执行你想要的功能并打印“列表没有排序!”。

PS。该程序并不像我想象的那样工作,因为它只检查前两个值是否按升序然后返回。相反,你应该检查前两个是否正确,设置一个标志来跟踪它们是否正确,然后继续循环而不退出。或者仅在未对列表进行排序的情况下返回,并且如果到达检查数组的末尾而您尚未退出,则必须对其进行排序,因此您应该返回true(如下面的代码示例中所示)。 return语句强制你的方法isSorted一旦命中该行就退出,而不经过整个循环。在尝试访问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;
    }

}