[英]Collections.max not working in a loop: “java.util.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-如果集合為空。
因此,顯然seq
為空(這意味着kbReader
可能沒有任何內容可讀取)。 將調試添加到您的代碼以更清楚地看到這一點(例如輸入/輸出)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.