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/