Java中只有一次出现

时间:2015-11-15 08:16:26

标签: java

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

3 个答案:

答案 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