簡體   English   中英

用 Java 編寫 WHILE 循環來計算序列中的最大值,以防止沒有用戶輸入

[英]Writing a WHILE loop in Java to compute the largest value in a sequence that prevents no user input

我正在嘗試通過閱讀 Cay Horstmann 的 Big Java、Late Objects 來學習(自學)Java。 我正在使用 repl.it 編寫我的代碼(如果您想查找它,它是公開的)

第 4 章循環的一個自檢問題是:當用戶在第 4.7.5 節(標題為最大值和最小值)的算法中沒有提供任何輸入並且 WHILE 循環只是因為這個原因終止程序時,你如何克服這個問題?

他們基本上要求重寫代碼以解決這個問題。

4.7.5節的信息你需要解決這個問題:要計算一個序列中的最大值,保留一個變量來存儲你遇到的最大元素,當你找到更大的元素時更新它。 (此算法要求至少有一個輸入。)

double largest = in.nextDouble();

while (in.hasNextDouble())
{
 double input = in.nextDouble();
 if (input > largest)
 {
 largest = input;
 }
}

這就是本書建議的這個問題的答案(但我不同意):一個解決方案是在循環中完成所有輸入並引入一個布爾變量來檢查循環是否第一次進入。

    double input = 0; 
    boolean first = true; 

    while (in.hasNextDouble()) 
    {   
     double previous = input;   
     input = in.nextDouble();   
     if (first) { first = false; }    
     else if (input == previous)    { System.out.println("Duplicate input"); } 
    } 

我沒有完全理解第一句話。 我不同意將其作為該問題的解決方案,因為(據我所知)它測試之前是否輸入過輸入,而不是測試是否提供了任何類型的用戶輸入。

我試圖將這兩部分代碼合並在一起,但似乎無法使其工作。 或者更具體地說:弄清楚如何構建它。 我需要什么變量/循環? 我按什么順序寫這個? 我在 Visio 中制作了第一段代碼的流程圖,但不知道如何繼續。

這是我到目前為止所寫的:

import java.util.Scanner;

class Main {
  public static void main(String[] args) 
  {
    Scanner input = new Scanner(System.in);
    System.out.println("Enter the number: ");

    double largest = 0;

    while (input.hasNextDouble())
    {
      double value = input.nextDouble();
      if (value > largest) 
       {
         largest = value;
         System.out.println("The largest input till now is: " + largest);
       }
    }

有人可以:

  1. 問我可以幫助我解決這個問題的問題? 即告訴我我需要什么工具(WHILE、FOR 等)
  2. 提供文本解決方案,我希望可以在代碼中進行轉換
  3. 或者給我寫代碼(我還沒學過數組,所以請不要解決)

提前致謝,

所以我在這方面工作了一段時間,我認為我有一些接近你正在尋找的使用 do while 循環的東西。

此代碼首先接受用戶輸入,然后檢查與上次輸入相比的值,並返回“輸入更高的值”、“找到重復的數字”,或者將最后輸入的數字設置為當前數字。

我希望這可以幫助您將代碼放到您想要的位置! 我還是新手,所以如果沒有完全優化,我深表歉意。

此外,我還沒有添加退出循環的方法,因此您可能希望在每次迭代中添加檢查以查看用戶是否願意繼續。

public static void main(String[] args) {

    double userInput = 0;
    double prevNum = 0; 
    boolean hasValue = false;
    boolean exitCode = false;

    do {        
        Scanner sc = new Scanner(System.in);
        System.out.println("Please enter a number: ");
        userInput = sc.nextDouble();

        do {
            if (userInput<prevNum) {
                System.out.println("Please enter a number higher than " + prevNum);
                hasValue=true;
            }
            else if (userInput==prevNum) {
                System.out.println("Duplicate input detected.");
                hasValue=true;
            }
            else {
                prevNum = userInput;
                hasValue = true;
            }
        }
        while(hasValue==false);

        System.out.println(prevNum);
        System.out.println(userInput);

    }
    while(exitCode==false);
}

如果您想計算輸入的數字是否是從一開始輸入的最大數字,但如果是第一次迭代則將其聲明為最大數字,請執行以下操作:

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    boolean flag = true;
    double largest = 0;
    System.out.println("Enter the number: ");
    while (input.hasNextDouble()){
        double value = input.nextDouble();
        if (flag) {
            flag = false;
            largest = value;
        }    
        else if (value > largest) largest = value;
     System.out.println("The largest input till now is: " + largest);
     System.out.println("Enter a new number: ");
    }
}

暫無
暫無

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

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