【发布时间】:2014-04-22 21:58:09
【问题描述】:
这是我区分两个 txt 文件之间差异的代码。唯一的问题是,如果我不从 arrayList 中减去 1,我会得到一个越界异常,所以现在它并没有针对所有元素运行,我该如何解决这个问题?
import java.io.*;
import java.util.*;
public class myfilereader
{
public static void main (String[] args) throws java.io.IOException
{
int temp = 0;
ArrayList<String> ArrayList1 = new ArrayList<String>();
ArrayList<String> ArrayList2 = new ArrayList<String>();
ArrayList<String> ArrayList3 = new ArrayList<String>();
try
{
Scanner File1 = new Scanner(new File("/Users/Home/Desktop/File1.txt"));
while (File1.hasNext())
{
ArrayList1.add(File1.next());
}
Scanner File2 = new Scanner(new File("/Users/Home/Desktop/File2.txt"));
while (File2.hasNextLine())
{
ArrayList2.add(File2.next());
}
}
catch (FileNotFoundException ex)
{
ex.printStackTrace();
}
for (String ArrayList : ArrayList1)
{
System.out.println("File 1: " + ArrayList1);
}
for (String ArrayList : ArrayList2)
{
System.out.println("File 2: " + ArrayList2);
}
if(ArrayList1.size()>ArrayList2.size())
{
for(int i=0; i<ArrayList1.size()-1; i++)
{
if(ArrayList1.get(i).equals(ArrayList2.get(i)))
{
temp++;
}
}
}
if(ArrayList2.size()>ArrayList1.size())
{
for(int i=0; i<ArrayList2.size()-1; i++)
{
if(ArrayList2.get(i).equals(ArrayList1.get(i)))
{
temp++;
}
}
}
if(temp == 0)
System.out.println("The files are the same.");
else
System.out.println("There are " + temp + " differences between the files");
}
}
【问题讨论】:
-
您首先在代码中检查 ArrayList2.size() > ArrayList1.size() ,然后您正在操作从 0 到 ArrayList2.size() 长度的 for 循环。因为 ArrayList2 更大,所以您将找不到 ArrayList1 中 i 点的最后一个元素!我认为你的 for 循环应该从 0 到 ArrayList1.size() 因为那个更短
-
如果一个列表比另一个大,你怎么能期望用相同的索引遍历它们呢?还有,读完文件为什么不关闭呢?
-
@AntonH 这不是问题所在。 for-condition 是
i < ArrayList1.size()-1,所以它会在i == ArrayList1.size()-2之后停止,因为严格小于。正确的条件是i < ArrayList1.size()。 实际 问题是 OP 使用了错误的限制:他应该在他的条件下使用两种尺寸中的 最小的。此外,他可能应该在他的 if 测试中使用大于或等于。
标签: java arraylist java.util.scanner indexoutofboundsexception