【问题标题】:I'm getting a StringOutOfBoundsException in part of a java Project我在 java 项目的一部分中得到了 StringOutOfBoundsException
【发布时间】:2014-04-16 21:27:14
【问题描述】:
else if (args.length == 5)
    {
        String firstyear = args[3];
        String secondyear = args[4];
        String datayear = temp[0];
        DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
        Date first = df.parse(firstyear);
        Date second = df.parse(secondyear);
        Date datas = df.parse(datayear);
        weekday = convertDateToWeekDay(temp);
        if (weekday == day || day == 0);
        {
            if (temp[8].contentEquals(drawtype)
                    || drawtype.contentEquals("A")) {
                if ((datas.equals(first)) || (datas.equals(second))
                        || ((datas.after(first)) && (datas.before(second)))) {
                    if (choice == 1 || choice == 2) {
                        for (int count = 0; count < jackpot.length; count++) {
                            jackpot[count] = Integer
                                    .parseInt(temp[count + 1]);
                            jackpotnumbers[jackpot[count] - 1]++;
                        }
                    }
                    if (choice == 2) {
                        bonus = Integer.parseInt(temp[7]);
                        if (temp[8].contentEquals(drawtype)
                                || drawtype.contentEquals("A"))
                            bonusnumbers[bonus - 1]++;
                    }
                }
            }
        }
    }

}

这是我必须为大学做的一个项目。其目的是分析两个日期之间和不同开奖的乐透信息。它给出了这个错误:

线程“主”java.lang.StringIndexOutOfBoundsException 中的异常:字符串索引超出范围:-1

它从命令行接收两个日期。它从文件中读取一行并将其放入一个名为 temp 的数组中。程序的其余部分工作正常,但如果它进入这部分,它会崩溃并给出错误。任何人都可以发现导致错误的原因。我也知道我可以把它写得更好,但我希望它先工作,然后再专注于让它成为好的代码。

编辑:bonusnumbers 和 jackpotnumbers 都是长度为 45 的 int 数组。temp 是一个字符串数组,其中 temp[0] 是一个日期,例如 10/07/1994。jackpot 是一个长度为 45 的 int 数组。 如果(工作日 == 天 || 天 == 0);这是为了检查从文件中读取的日期是否是用户提供的某一天。 我不知道堆栈跟踪或使用调试器是什么意思。我是编程新手

编辑2:我知道错误出现在本节中,因为它仅在我运行本节时崩溃。我可以运行代码的其他部分而不会崩溃。在此错误之后,它只是说出每个方法的名称

【问题讨论】:

  • 那么哪一行抛出异常?您能否将代码示例简化为一个简短但完整的程序,只是 演示了问题。如果您可以格式化您的代码,它也真的会有所帮助 - 如果没有适当的缩进,很难阅读。
  • 您能粘贴堆栈跟踪的前 10 行吗?
  • 尝试将其缩小到更具体的代码行。您向我们展示的那段代码有许多未在该部分代码中定义/分配的变量(它们可能在之前,但我们不知道这一点)。使用你的调试器,异常到底在哪里抛出?
  • 这条线是做什么的? if(weekday == day || day == 0);
  • 未知数太多:bonusnumberstempjackpotjackpotnumbers。您希望我们如何提供帮助?

标签: java string runtime-error indexoutofboundsexception


【解决方案1】:

您提到您是“编程新手”,所以您不“知道堆栈跟踪或使用调试器是什么意思”。那么,您如何知道是这段代码导致了问题?您一定已经在 IDE 的控制台中看到了一些东西(假设您使用的是 IDE,或者您可能正在从命令行运行它?无论哪种情况,在您发布的一个说诸如 “at java...” 之类的话。无论如何,如果存在,那就是您的堆栈跟踪(基本上,导致您的@987654321 的程序执行行@)。

无论如何,由于它正在抛出 StringIndexOutOfBoundsException,我会说您的 contentEquals(...) 方法调用非常可疑。但是,正如其他人所说,没有更多信息是不可能的。

【讨论】:

    猜你喜欢
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    相关资源
    最近更新 更多