簡體   English   中英

Collections.max無法循環運行:“ java.util.NoSuchElementException”

[英]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-如果集合為空。

集合Javadoc

因此,顯然seq為空(這意味着kbReader可能沒有任何內容可讀取)。 將調試添加到您的代碼以更清楚地看到這一點(例如輸入/輸出)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM