亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我的代碼必須輸入兩個輸入才能開始運行?

為什么我的代碼必須輸入兩個輸入才能開始運行?

藍山帝景 2023-10-12 14:43:14
我在代碼中使用 while 語句,用戶在 while 語句內輸入一個數字。要停止程序循環,用戶必須輸入“停止”一詞。但是,一旦我輸入一個數字,輸出就會跳到另一行,而不打印我希望它打印的語句,并且我必須再次輸入所需的輸入以使程序開始循環。唯一不會發生此問題的情況是當用戶首先輸入“stop”時,代碼就可以正常工作。這是為了找到任意數量的用戶輸入數字的最大值、最小值和平均值。我嘗試更改 else/if 語句的順序以及所述 else/if 語句的參數,但似乎沒有任何效果。    boolean stopped = false;    int numberAmount = 0;    int invalidAmount = 0;    double max = Integer.MIN_VALUE;    double min = Integer.MAX_VALUE;    double mean = 0;            while(stopped == false)    {           System.out.print("Enter a number (type "+"\""+"stop"+"\""+" to stop): ");        String originalInput = userInput.nextLine();        if(originalInput.equals("stop"))        {            stopped = true;            invalidAmount ++;            System.out.println(numberAmount+" numbers were entered with "+invalidAmount+" invalid inputs.");        }        else if(userInput.hasNextDouble())        {            double currentValue = Double.parseDouble(originalInput);            max = Math.max(max, currentValue);            min = Math.min(min, currentValue);            mean = currentValue;            numberAmount ++;        }        else if(originalInput.equals("stop") == false)        {            System.out.println("Not a number...");            invalidAmount ++;        }    }    System.out.println("The maximum is "+max+".");    System.out.println("The minimum is "+min+".");    System.out.println("The mean is "+(mean / numberAmount)+".");    userInput.close();}}例如,我期望輸入 7 后的輸出為下一行的“輸入數字(鍵入“stop”停止):”(因為程序循環不斷提示輸入數字),然后用戶可以繼續輸入他們喜歡的數字。相反,實際輸出是原始提示用戶輸入下的空行,用戶必須再次輸入所需的輸入,程序才能開始循環。
查看完整描述

3 回答

?
至尊寶的傳說

TA貢獻1789條經驗 獲得超10個贊

您沒有在代碼示例中指定userInput是什么,但從使用情況來看,它看起來是 的實例Scanner。如果你有一個Scanner聲明然后調用hasNextDouble(),你將得到一個符合你的用法的布爾結果——你將其作為語句中的條件if。

Scanner?userInput?=?new?Scanner(System.in);
boolean?b?=?userInput.hasNextDouble();

圖片中缺少的是如何hasNextDouble()工作的。查看Scanner 的 Javadoc:

如果可以使用 nextDouble() 方法將此掃描器輸入中的下一個標記解釋為雙精度值,則返回 true。掃描儀不會前進超過任何輸入。

為了回答下一個輸入是否是雙精度數的真/假,掃描儀必須等待用戶的輸入才能繼續。

所有這些都是為了說明:您的代碼看起來運行正常。如果您不想等待用戶輸入,則需要編寫代碼來反映這一點。


查看完整回答
反對 回復 2023-10-12
?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

我認為你應該反轉代碼的邏輯,假設你正在使用掃描儀,嘗試這樣的事情:


import java.util.Scanner;


public class Main {

    public static void main(String[] args) {

        boolean stopped = false;


        int numberAmount = 0;

        int invalidAmount = 0;


        double max = Integer.MIN_VALUE;

        double min = Integer.MAX_VALUE;

        double mean = 0;


        while (stopped == false) {


            Scanner userInput = new Scanner(System.in);

            System.out.print("Enter a number (type " + "\"" + "stop" + "\"" + " to stop): ");


            if (userInput.hasNextDouble()) {

                double currentValue = userInput.nextDouble();

                max = Math.max(max, currentValue);

                min = Math.min(min, currentValue);

                mean = currentValue;

                numberAmount++;


            } else {

                String originalInput = userInput.nextLine();

                if (originalInput.equals("stop")) {

                    stopped = true;

                    invalidAmount++;

                    System.out.println(numberAmount + " numbers were entered with " + invalidAmount + " invalid inputs.");

                } else {

                    System.out.println("Not a number...");

                    invalidAmount++;

                }

            }

        }



        System.out.println("The maximum is " + max + ".");

        System.out.println("The minimum is " + min + ".");

        System.out.println("The mean is " + (mean / numberAmount) + ".");


        // userInput.close();

    }

}

基本上,您首先檢查輸入類型,然后才從控制臺收集值。按照你現在的方式去做,你總是會要求第二個輸入。


查看完整回答
反對 回復 2023-10-12
?
料青山看我應如是

TA貢獻1772條經驗 獲得超8個贊

我不太了解 API,但我希望 hasNextDouble 讀取另一行。檢查originalInput是否為double,不要讀取另一行。



查看完整回答
反對 回復 2023-10-12
  • 3 回答
  • 0 關注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號