【问题标题】:receiving ArrayIndexOutOfBoundsException but cannot figure out why收到 ArrayIndexOutOfBoundsException 但无法弄清楚原因
【发布时间】:2013-09-21 03:48:45
【问题描述】:

这是一个大学作业(学术报告样本),我以为我已经完成并准备提交,但是当我开始测试时......我一直在 main 的第 60 行收到 ArrayIndexOutOfBoundsException,我不明白为什么。我是 Java 新手,但确实在这个程序上投入了很多时间。非常感谢任何帮助/建议。 第 60 行 = "int credits = Integer.parseInt(input[1]);" //我认为错误是由于数据类型引起的???我迷路了。

Course / Grade / Report 类将数据传递给主 java2pgm1

【问题讨论】:

  • 你检查字符串变量 course 的值是多少?
  • ERROR= 运行:线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 1 at java2pgm1.Java2pgm1.main(Java2pgm1.java:60) Java 结果:1 BUILD SUCCESSFUL(总时间:11 秒)
  • 嗨,是的,谢谢。这是字符串课程的价值。 course = JOptionPane.showInputDialog("请输入课程"); String[] 输入 = course.split(":");
  • no.. 值当然应该是用户在 inputDialogue 中的输入

标签: java exception arraylist variable-assignment


【解决方案1】:

当您调用 split 时,它会返回一个数组。在这里,您使用 (":") 进行拆分 您需要在访问变量输入之前检查它的长度。

    String[] input = course.split(":");
    int credits = Integer.parseInt(input[1]);

输入数组不能包含超过 1 个值,因此会失败

【讨论】:

  • 输入 = CGS1920:1:b:201201。每个分配都不需要验证,并假设输入始终采用正确的格式
  • 了解有关 ArrayIndexOutofBoundException 的更多信息。它与数据类型无关。它与数组的长度有关。如果你输入本质上是 CGS1920:1:b:201201 那么你的数组应该有 4 个值并且代码应该可以工作
  • 好的,非常感谢您的指导!感谢帮助。请再找我一件事,在这段代码之后你会看到进入 q 以退出循环的代码...这可能是问题的一部分,但在输入 q 后退出不会拆分
  • 我不确定我是否理解您关于退出的查询。也许您可以指定行号。但同样你得到的异常应该只与数组的大小有关
【解决方案2】:

当来自用户的输入不符合预期的格式course_number:number_of_credits:grade_received:term_taken 时,将发生异常。在您的情况下,您遇到此异常的输入值是什么?是否包含:

建议你在引用index[n]之前测试input数组的长度

【讨论】:

  • 非常感谢!我会调查并尝试找到我的问题
【解决方案3】:
String[] input = course.split(":");
int credits = Integer.parseInt(input[1]);
Integer term = Integer.parseInt(input[3]);
Course cObject = new Course(input[0],credits,input[2],input[3]);

您的 main 中的上述 sn-p 始终假定 course 字符串具有 abc:def:ghi:jkl 至少 3 个“:”。当字符串没有 3 个“:”时,处理错误情况总是一个好习惯。将您的代码修改为如下所示

String[] input = course.split(":");
if(input.length == 4)
{
    int credits = Integer.parseInt(input[1]);
    Integer term = Integer.parseInt(input[3]);
    Course cObject = new Course(input[0],credits,input[2],input[3]);
}
else
{
    //show some error message to user
}

【讨论】:

  • 这是有道理的,因此程序可以处理输入数据中不同数量的 :。谢谢你的建议! =)
【解决方案4】:

这里输入数组的大小可以是0或1,你可以通过input.length查看。 如果数组的大小小于或等于要从数组中获取的元素,则抛出运行时异常 ArrayIndexOutOfBoundsException。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    相关资源
    最近更新 更多