【发布时间】:2014-10-19 06:14:29
【问题描述】:
我已经查看了一个小时,但我不明白为什么它一直告诉我同样的错误。 对于那些想知道我的程序是什么的人,基本上它会读取一个包含条形码、名称和价格的文本文件。然后,我将读取另一个仅包含条形码的文本文件,并打印其各自的名称和价格。 不幸的是,它只打印一行,然后显示此错误:-
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 99, Size: 99
at java.util.ArrayList.rangeCheck(ArrayList.java:635)
at java.util.ArrayList.get(ArrayList.java:411)
at javaapplication9.JavaApplication9.Search(JavaApplication9.java:66)
at javaapplication9.JavaApplication9.main(JavaApplication9.java:85)
主要
public class JavaApplication9
{
long value1;
String value2;
double value3;
ArrayList<String> toBeSplit = new ArrayList();
String[] split;
ArrayList <Inventory> productList = new ArrayList<> ();
ArrayList <Long> barcodes = new ArrayList ();
public long ReadFile(String sfile) throws IOException
{
int x = 0;
File inFile = new File(sfile);
BufferedReader reader = new BufferedReader(new FileReader(inFile));
String sline = null;
while ((sline=reader.readLine()) != null)
{
toBeSplit.add(x,sline);
x++;
}
reader.close();
return inFile.length();
}
public void splitString ()
{
int a = 0;
while (a<toBeSplit.size())
{
split = toBeSplit.get(a).split(",");
value1 = Long.parseLong(split[0]);
value2 = split[1];
value3 = Double.parseDouble(split[2]);
productList.add(new Inventory (value1,value2,value3,split[0]));
a++;
}
}
public long readBarcodes (String file) throws IOException
{
File text = new File(file);
int x = 0;
BufferedReader reader = new BufferedReader(new FileReader(text));
String line = null;
while ((line=reader.readLine()) != null)
{
long barcod = Long.parseLong (line);
barcodes.add(x,barcod);
x++;
}
reader.close();
return text.length();
}
public void Search()
{
int size = barcodes.size();
int counter = 0;
for (Inventory e : productList)
{
if ((e.getBarcode() - barcodes.get(counter) == 0) && counter <= size)
{
System.out.println (e.getRBarcode()+ "\t" + e.getName() + "\t"+ e.getPrice());
}
else
{
counter++;
}
}
}
public static void main(String[] args)
{
try
{
JavaApplication9 instance = new JavaApplication9 ();
instance.ReadFile("Products (1).csv");
instance.splitString();
instance.readBarcodes("Items.txt");
instance.Search();
}
catch (IOException e)
{
System.out.print ("Error");
}
}
}
库存类
public class Inventory
{
long barcode;
String name,realBar;
double price;
public Inventory (long bars,String pname,double prices,String realBarcode)
{
barcode = bars;
name = pname;
price = prices;
realBar = realBarcode;
}
public long getBarcode ()
{
return barcode;
}
public String getName ()
{
return name;
}
public String getRBarcode()
{
return realBar;
}
public double getPrice ()
{
return price;
}
}
【问题讨论】:
-
看起来像
Off-by-One错误 -
错误信息实际上告诉你所有必要的细节来找到问题的确切位置。该程序尝试访问最后一个元素,它发生在文件
JavaApplication9.java的第66行