【问题标题】:Array is out of bounds while counting [CORRECT]计数时数组超出范围 [正确]
【发布时间】:2015-02-04 03:17:27
【问题描述】:

我需要打印一个包含重复单词的数组。我已经让我的数组工作了,但我不知道如何正确计算单词。我已经知道,当我的索引计数器 (i) 为 49 时,当 (i) 想要计数到 50 时,我得到了错误,但我不知道任何其他方法来调整我的方法以使其正常工作。你能帮我么?任何帮助将不胜感激!

这是我的数组:

蓝色 蓝色 蓝色 蓝色 蓝色 蓝色 蓝色 蓝色 蓝色 蓝色 蓝色 蓝色 蓝色 棕色 绿色 绿色 绿色 绿色 绿色 绿色 绿色 绿色 柠檬 柠檬 柠檬 柠檬 柠檬 丁香 丁香 橙色 橙色 红色 红色 红色 红色 红色 红色 红色 红色 红色 红色 白色 白色 白色 白色 白色 黄色 黄色 黄色

正确的代码

public static void printWordCount(String[] z) 
{
    System.out.println("THERE ARE " + wordTotal + " WORDS IN THE FILE");
    System.out.println("WORD W/ COUNT:");

    int i = 0;
    int count = 0;

    while(i < z.length - 1) {
        if (z[i].equalsIgnoreCase(z[i+1])) {
            i++;
            count++;
        }
        else if (!z[i].equalsIgnoreCase(z[i+1]) || i == z.length - 1) {
            count++;
            System.out.println(z[i] + " / " + count);
            i++;
            count = 0;
        }
    }
    count++;
    System.out.println(z[i] + " / " + count);
}

这是我的输出:

文件中有 50 个单词

字数:

蓝色 / 13

棕色 / 1

绿色 / 8

柠檬/6

紫丁香 / 2

橙色/2

红色 / 10

白色 / 5

黄色/3

【问题讨论】:

    标签: java arrays printing indexoutofboundsexception


    【解决方案1】:

    您的条件允许i 到达z.length - 1。 然后z[i].equalsIgnoreCase(z[i+1]) 将您带出数组边界,因为i+1 == z.length

    如果您希望将ith 元素与i+1th 元素进行比较,请将条件更改为:

    while(i < z.length - 1) 
    

    那么你可能应该在循环之后添加

            count++;
            System.out.println(z[i] + " / " + count);
    

    打印最后一个单词的出现次数。

    【讨论】:

    • 在这些答案上总是领先于我 :)
    • 感谢您的帮助!但是,我更改了它,但它仍然不打印最后一组单词。我会用最新的代码更新我的问题。
    • @Braulio 查看我的编辑。尚未对其进行测试,但类似的东西应该可以工作。
    • @Eran!谢谢我明白了。你是对的!我更多地使用我的代码,并得到了它。非常感谢并照顾我的朋友!
    猜你喜欢
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    相关资源
    最近更新 更多