【问题标题】:Sorting Arrays. The first element is length of array排序数组。第一个元素是数组的长度
【发布时间】:2015-05-14 13:46:37
【问题描述】:

问题: 排序?)编写以下方法,如果列表已经按升序排序,则返回 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;
    }

}

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

【问题讨论】:

  • 我想到了查看您的代码ArrayIndexOutOfBoundsException。 (list[i + 1] 可能有i == list.length-1
  • 另外,您检查的是array 而不是list
  • 所以,数组的大小是固定的。例如,如果用户输入 8 10 1 5 16 61 9 11 1 那么 8 将是它的长度。这一步代码怎么做??
  • 如果用户输入了 4 1 3 4 5 那么 4 就是它的长度。这个代码怎么写?
  • 您的isSorted 方法有误。循环只会执行一次。如果你有 1 2 3 5 4 怎么办?你需要摆脱else { return true; }

标签: java arrays java.util.scanner


【解决方案1】:

默认情况下,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;
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多