Scanner in = new Scanner(System.in);
x = new Scanner(new File("C:\\me.txt"));
int count = 0;
ArrayList<String> b = new ArrayList<>();
while((x.hasNext()))
{
String a = x.next();
int num = 0;
for(int i=0;i<count;i++)
{
if((b.get(i).equals(a)))
{num++;}
}
if(num==1)
{b.add(a);}
count++;
}
我想仅在出现次数时才将元素添加到b。但是我一直有一些错误。
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
或者b.get(i)在第一次迭代中是否等于NULL?
if((b.get(i).equals(a)))
答案 0 :(得分:2)
您收到此错误是因为b
为空,但不包含任何元素,并且您正尝试访问其中的元素b.get(i)
,因此您获得了java.lang.IndexOutOfBoundsException
,请使用{{1查找列表是否包含该元素,如果没有将其添加到列表中或使用Set它不允许重复
contains
答案 1 :(得分:0)
请
检查
行if ((b.get(i).equals(a)));
它最后包含一个分号,我认为这是错误的:每次执行花括号中的下一个语句(num++;
),而不仅仅是条件匹配。
在调用b.get(i)
之前检查null
是否为equals
。您已经知道a
不是null
,因此检查a.equals(b.get(i))
检查count
的使用情况。它的值与数组列表的大小无关,但是你在循环中以这种方式使用它。在你的实现中,可能会出现count
的值大于列表大小的情况。这会产生IndexOutOfBoundsException
。
答案 2 :(得分:0)
显然,您尝试使用temp1 = newNumerator[count]; // Remove the *
newNumerator[count] = newNumerator[count + 1];
newNumerator[count + 1] = temp1;
temp2 = newDenominator[count];
newDenominator[count] = newDenominator[count + 1];
newDenominator[count + 1] = temp2;
作为count
的长度。但是,b
的增加频率比count
增加的频率更高。
可能的解决方案是:
b
count
完全b
并在for循环中使用count
。