NoSuchElementException

NoSuchElementException

public static void main(String args[])
{
    ArrayList <Integer> seq = new ArrayList<Integer>();
    Scanner kbReader = new Scanner(System.in);
    int iterations = 0;
    System.out.println("Enter a number sequence(no spaces, only commas)");
    String j = kbReader.nextLine();
    kbReader = new Scanner(j);
    kbReader.useDelimiter("\\D");

    //adds input to array list
    while(kbReader.hasNextInt())
    {
        int i = kbReader.nextInt();
        seq.add(i);
    }

    while(seq.size() > 0)
    {
        //removes zeros and numbers behind
        if(seq.contains(0))
        {
            int zeroSearch = seq.lastIndexOf(0);
            for(int c = zeroSearch; c >= 0; c--)
            {
                seq.remove(c);
            }
            iterations++;

        }


        //number operations
        int largest = Collections.max(seq);
        int largeLoc = seq.lastIndexOf(largest);

        if(largest % 2 == 0)
        {
            largest = largest -2;
            iterations++;
        }
        else
        {
            largest--;
            iterations++;
        }
        seq.set(largeLoc, largest);
    }

    System.out.println(iterations + "moves" required);
}


由于某种原因,max方法在此循环中将不起作用,并返回错误“ java.util.NoSuchElementException”。方向指示为“给出一个数字序列,删除所有零(如果有的话),以及所有在其左侧的数字。然后找到最大的剩余数字,如果它是偶数减去2或如果是奇数减去1。如果两个或两个以上的数字成为最大位数,请使用最右边的数字为最大位数。对序列重复应用规则。删除序列需要多少步?”

最佳答案

在这种情况下,您可以阅读java.util.Collections#max的javadoc以了解为什么会抛出该错误:


  抛出:
  
  NoSuchElementException-如果集合为空。


Collections Javadoc

显然seq是空的(意味着kbReader可能没有任何内容可读取)。将调试添加到代码中可以更清楚地看到它(例如输入/输出)。

关于java - Collections.max无法循环运行:“java.util.NoSuchElementException”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40347713/

10-10 20:32