Java 爪哇语;“线程中的异常”;“主要”&引用;错误修复

Java 爪哇语;“线程中的异常”;“主要”&引用;错误修复,java,bounds,out,Java,Bounds,Out,目前,我正在开发一个应用程序,它允许添加、存储、借用技术手册,并将其返回到虚拟库 目前我正在开发一个部分,它允许用户归还他们以前借过的书。当他们在主菜单中输入“4”时,将显示当前借用手册的列表 我已经设法让借来的手册显示出来,但我也遇到了一个错误,退出了我的java应用程序,如下所示: 以下是此应用程序的相关代码(如果我需要显示更多信息,请告诉我): static void returnManual(){ System.out.printf(“\n\n它们是当前借出的手册:\n\n”); if

目前,我正在开发一个应用程序,它允许添加、存储、借用技术手册,并将其返回到虚拟库

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

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

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

static void returnManual(){
System.out.printf(“\n\n它们是当前借出的手册:\n\n”);
if(ManualList.get(ManualChoice).status.equalsIgnoreCase(status2)&&brookedmanuals.size()>=ManualChoice){
对于(int i=0;i
如果有人知道如何解决这个错误,请告诉我:)我对Java相当陌生


更新 我已经应用了Christophers在评论中提出的建议,将ManualList.size()更改为借用manuals.size()

现在的问题是,如果用户借用了2本手册,并希望归还第二本手册,则在输入要归还的(第二本)手册的标题名称后,其标题输入不会被激活。如果输入了第一本手册的标题,则应用程序将按预期运行,并将手册归还到库中

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

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);
    }
 }

if(null!=ManualList&&ManualList.size()>=ManualChoice&&
ManualList.get(ManualChoice).status.equalsIgnoreCase(status2)){
对于(int i=0;ii)//检查borrowedManuals的大小如果您在哪里检查手册列表,则最好将其选中
System.out.println(借用manuals.get(i.displayManual());
returnManualTitle=Console.readString(Messages.enterManualTitle,Messages.tooShortMessage,3);
}
}

首先检查
ManualList
是否为
null
然后检查
ManualList.size()>=ManualChoice
ManualList
大小大于
ManualChoice
然后从该索引中获取值,这样它就不会给您提供
IndexOutOfBoundException

您确定
ManualList
借用的手册
大小相同吗?为什么使用ManualList.size()而不是借用的手册.size()? 您正在尝试访问仅包含2个元素的列表中的第三个元素。(索引2表示第三个元素,因为它从0开始)此外,不要用大写字母命名变量/字段。对于字段和变量,约定为小写首字母,对于类名,约定为大写首字母。它会混淆代码的颜色,使代码的可读性降低。@ChristopherShannnon谢谢您的回复,我已经实施了您的建议,并用出现的新问题更新了我的答案。您不能将您的问题从一个主题改为另一个主题。索引超出范围是固定的,因此为新问题打开一个新问题。嗯,这似乎只显示一本借用的手册,即使用户借用了几本。你知道为什么会这样吗?此外,一旦用户输入显示的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);
    }
 }