【问题标题】:Sorting Strings in an Array by Char按字符对数组中的字符串进行排序
【发布时间】:2014-03-10 19:35:48
【问题描述】:

我试图在不使用 sort 方法的情况下将数组中的字符串列表按字母顺序排序。

public static String[] sortedAdjectives(String[] original)
{
    String[] sortedArray;
    int aValue = 65;
    String word = "";
    sortedArray = new String[25];
    for(int i = 0; i <25; i++)
    {
        original[i]=word;
        char c = word.charAt(0);
        sortedArray[c-aValue]=word;

    }
    return sortedArray;

是我的方法,并且

public static void main(String[] args) throws FileNotFoundException {
        Scanner names = new Scanner(new File("names.txt"));
        Scanner adjectives = new Scanner(new File("adjectives.txt"));
        String[] adjectiveArray;
        adjectiveArray = new String[25];
        int counter = 0;
        while (counter<25)
        {
            String in = adjectives.next();
            fixCapitalization(in); //method that fixes capitalization
            adjectiveArray[counter]=in;
            counter++;
        }
        sortedAdjectives(adjectiveArray);

是我将文件中的项目放入数组的位置。我来了

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
    at java.lang.String.charAt(Unknown Source)
    at Hmwk.sortedAdjectives(Hmwk.java:56)
    at Hmwk.main(Hmwk.java:24)

当我尝试运行我的程序时,我不知道哪里出错了。如果您能指出我正确的方向,我将不胜感激。感谢您的宝贵时间。

【问题讨论】:

  • 在您的排序方法中,word 是空字符串。你正在用这个覆盖你输入数组的所有值,并试图访问一个不存在的字符。
  • 您对输入字符串做出了许多假设(有几个错误,例如假设只有 25 个形容词。您的策略应该是实现一个对字符串数组进行排序并调用它的方法。

标签: java arrays string sorting char


【解决方案1】:

您已将word 初始化为空字符串:

String word = "";

然后你在一个空字符串上调用charAt(0)。不能那样做。 您的字符串至少需要超过 1 个字符才能调用该方法。

【讨论】:

  • 除此之外,最好补充一点,因为Strings是不可变的,调用方法fixCapitalization应该返回一个String,它的值应该替换in的值,除非这个方法修改了String实习生(这真的很奇怪)。
  • 但不会是 original[i]=word;使 word 等于索引 0 处的项目?
  • 不,您必须改用word = original[i]。使用original[i]=word,您将word 的值分配给original[i]
【解决方案2】:

你在 for 循环中犯了一个小错误。 应该是 word = original[i];你反过来做了,使这个词永远不会把原始参数作为参考。

这里还有一些需要改进的地方:使用 arraylist 将具有更好的可扩展性并避免擦除重复的字母。

【讨论】:

    猜你喜欢
    • 2014-10-28
    • 2014-04-23
    • 2012-10-14
    • 2014-01-05
    • 2022-11-25
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多