为什么这个Java数组的.sort方法不起作用?

3

开始觉得我用错了学习书。我从Sam's Learn Java逐字复制了这段话,但是.sort(names);方法在数组类型中未定义。

我有一种感觉是与public static void main(String[] args) {调用有关,但我不知道如何修改它。

package arrays;

import java.util.*;

public class Arrays {
    public static void main(String[] args) {
        String names[] = { "Lauren", "Audrina", "Heidi", "Whitney",
                "Stephanie", "Spencer", "Lisa", "Brody", "Frankie", "Holly",
                "Jordan", "Brian", "Jason" };
        System.out.println("The original order:");
        for (int i = 0; i < names.length; i++) {
            System.out.print(i + ": " + names[i] + " ");
        }
        Arrays.sort(names);
        System.out.println("\nThe new order:");
        for (int i = 0; i < names.length; i++) {
            System.out.print(i + ": " + names[i] + " ");
        }
        System.out.println();
    }
}

20
那么你不应该把你的类命名为 Arrays,或者至少要在第二个 java.util.Arrays 前加上限定词。 - Thomas Jungblut
1
Thomas(+1)所说的话。专业提示:要打印数组内容,最好使用Arrays.toString(names)而不是索引迭代。 - Mena
1
谢谢大家。我甚至没有想到:@Mena,谢谢!我只是刚开始弄清楚这一切,我只是希望运行一个示例代码并看到它工作。不幸的是,我对Java的无知使我无意中使用了不合适的类名。 - Anonymoose
1
@Mena 我不同意“专业技巧”;使用 toString 意味着你得到的是 toString 实现给出的内容,未经定制,没有可能需要的额外数据,带有括号等。如果你在 JDK 8 上,可以考虑使用 String.join 或者一个 util 库,但即使这样也不能让你访问索引。 - Dave Newton
3
@T.J.Crowder 给出的是答案,而我只是给了一个提示;-) - Thomas Jungblut
显示剩余2条评论
1个回答

9

Thomas 指向了答案,但由于它是一条评论,你无法接受它;这里有一个 CW 可以接受。)

Arraysjava.util 包中的一个类,它有一个 sort 方法。当你将自己的类命名为 Arrays 时,你就隐藏了代码中的 java.util 类(有时被称为“阴影”),所以 Arrays.sort(names); 这行代码试图在你的类上使用 sort 方法(而它并没有这个方法)。

要修复它,你有三个选项:

  1. 更改你的类名(例如:ArrayTest),或者

  2. 将你的调用改为:java.util.Arrays.sort(names);(这样编译器就知道你在谈论 java.util.Arrays 而不是你的类),或者

  3. 使用 import static java.util.Arrays.sort; 导入方法 sort 而不是类 Arrays,然后用 sort(names); 调用它(没有前置类名)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接