【发布时间】: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); -
未知数太多:
bonusnumbers、temp、jackpot、jackpotnumbers。您希望我们如何提供帮助?
标签: java string runtime-error indexoutofboundsexception