【问题标题】:Java "exception in thread "main"" error fixJava“线程“主”中的异常”错误修复
【发布时间】:2015-01-03 14:56:34
【问题描述】:

目前我正在开发一个应用程序,该应用程序允许添加、存储、借用、返回虚拟图书馆。

目前我正在研究允许用户归还他们以前借过的书的部分。当他们在主菜单输入“4”时,他们将显示当前借用手册的列表。

我已经设法让借来的手册显示出来,但我也遇到了一个错误,它退出了我的 java 应用程序,如下所示:

这是此应用程序的相关代码(如果我需要显示更多请告诉我):

static void returnManual(){
    System.out.printf("\n\nHere are the Manual/s currently out on loan:\n\n");
    if(ManualList.get(ManualChoice).status.equalsIgnoreCase(status2) && borrowedManuals.size() >= ManualChoice){
    for (int i = 0; i < borrowedManuals.size(); i++)
        System.out.println(borrowedManuals.get(i).displayManual());
        returnManualTitle = Console.readString(Messages.enterManualTitle, Messages.tooShortMessage, 3);
    }

如果有人知道如何解决此错误,请告诉我 :) 我对 Java 还很陌生!


更新

我已经应用了 cmets 中提出的 Christophers 建议,将 ManualList.size() 更改为 borrowedManuals.size()。

现在的问题是,如果用户借了两本手册并希望归还第二本手册,一旦他们输入了他们希望归还的(第二本)手册的标题名称,他们的标题条目就不会被激活。如果输入了第一个手册标题,应用程序将按预期运行并将手册返回到库。

下面是一个例子。我还更新了我的代码(上面)以包含所做的更改。

【问题讨论】:

  • 您确定ManualListborrowedManuals 的大小相同吗?
  • 你为什么使用ManualList.size()而不是借用Manuals.size()?您正在尝试访问只有 2 个元素的列表中的第三个元素。 (索引 2 表示从 0 开始的第 3 个元素)
  • 另外,不要以首字母大写命名变量/字段。字段和变量的约定是小写首字母,类名的首字母大写。它会混淆代码着色并降低代码的可读性。
  • @ChristopherShannnon 感谢您的回复,我已经实施了您的建议并更新了我的答案,出现了一个新问题
  • 您不应该将您的问题从一个主题更改为另一个主题。超出范围的索引是固定的,所以为您的新问题打开一个新问题。

标签: java bounds out


【解决方案1】:
if(null != ManualList && ManualList.size() >= ManualChoice &&
          ManualList.get(ManualChoice).status.equalsIgnoreCase(status2) ){
for (int i = 0; i < ManualList.size(); i++)
    if(borrowedManuals.size() > i)  // check borrowedManuals size its better to check this in if where you check for ManualList 
       System.out.println(borrowedManuals.get(i).displayManual());
       returnManualTitle = Console.readString(Messages.enterManualTitle, Messages.tooShortMessage, 3);
    }
 }

首先检查ManualList 不是null 然后检查ManualList.size() &gt;= ManualChoice ManualList 大小大于ManualChoice 然后从该索引中获取值所以它不会给你IndexOutOfBoundException

【讨论】:

  • 嗯,这似乎只显示了1本借来的手册,即使用户已经借了几本。你知道为什么会这样吗?此外,一旦用户输入显示的 1 本手册的标题,就会显示他们借用的下一本手册。
  • 检查borrowedManuals 列表的大小,我认为您在此列表中只有一项
猜你喜欢
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多