簡體   English   中英

While 循環查找數字的平方根,直到它小於或等於 1.01

[英]While loop to find square root of a number until it is less than or equal to 1.01

我需要幫助實現一個 while 循環,該循環將用戶輸入作為雙精度或整數(不確定)並平方根,直到它達到小於或等於 1.01。

示例: Math.sqrt(10.5)

1. Calculated square root is --> 3.24037034920393
2. Calculated square root is --> 1.8001028718392542
3. Calculated square root is --> 1.3416791240230483
4. Calculated square root is --> 1.1583087343290857
5. Calculated square root is --> 1.0762475246564267
6. Calculated square root is --> 1.0374235030383814
7. Calculated square root is --> 1.0185398877993839
import java.util.Scanner;
public class SquareRoot {

    public static void main (String args[]){
        final double SENTINEL = 10;
        int count = 0;

        Scanner scan = new Scanner(System.in);
        double userInput; // input value

        do
        {
            System.out.println( "Enter a number greater than 10"  );
            userInput = scan.nextDouble( );
        } while ( userInput <= 1 || userInput >= 10 );


        double squareRoot = Math.sqrt(userInput);
        double resultSquareRoot = Math.sqrt(squareRoot);

        while (resultSquareRoot <= 1.01){
            resultSquareRoot = Math.sqrt(squareRoot);

        }
        System.out.println(resultSquareRoot);


    }

}

你的循環:

while (resultSquareRoot <= 1.01){
    resultSquareRoot = Math.sqrt(squareRoot);
}
System.out.println(resultSquareRoot);

應該:

while (resultSquareRoot > 1.01){
    System.out.println("Calculated square root is --> " + resultSquareRoot);
    resultSquareRoot = Math.sqrt(resultSquareRoot);
}

您沒有將參數的值更改為Math.sqrt ,因此resultSquareRoot永遠不會改變。

你想要resultSquareRoot = Math.sqrt(resultSquareRoot);

而不是resultSquareRoot = Math.sqrt(squareRoot);

在您的解決方案中需要注意的事情很少,為什么要嘗試在 do-while 中調用以下代碼行。 不需要,因為您的意圖是應用 Math.sqrt 直到輸入的平方數達到 1.01,因此我們在這里討論的是循環。

System.out.println("請輸入一個大於10的數字"); userInput = scan.nextDouble();

你也不需要第二個 while 循環。

while (resultSquareRoot <= 1.01){
            resultSquareRoot = Math.sqrt(squareRoot);

        }

您的代碼中缺少的是中斷條件。

這可以通過以下代碼行來實現。

    do {
         userInput = Math.sqrt(userInput);
        System.out.println("Calculated square root is -->"+userInput);
        if(userInput<= 1.01)
            break;
    } while (userInput >= 1.01 );

輸出

Calculated square root is -->3.24037034920393
Calculated square root is -->1.8001028718392542
Calculated square root is -->1.3416791240230483
Calculated square root is -->1.1583087343290857
Calculated square root is -->1.0762475246564267
Calculated square root is -->1.0374235030383814
Calculated square root is -->1.0185398877993839
Calculated square root is -->1.0092273717053972

你可能想改變

 while (resultSquareRoot <= 1.01){
        resultSquareRoot = Math.sqrt(squareRoot);

    }

 while (resultSquareRoot > 1.01){
        resultSquareRoot = Math.sqrt(resultSquareRoot );

    }

do while 條件錯誤。 它應該是:

do
    {
     System.out.println( "Enter a number greater than 10"  );
     userInput = scan.nextDouble( );
    } while ( userInput <= 10 );

而while條件也是錯誤的。 請檢查以下代碼:

public static void main (String args[]){
        final double SENTINEL = 10;
        int count = 0;

        Scanner scan = new Scanner(System.in);
        double userInput; // input value

        do
        {
            System.out.println( "Enter a number greater than 10"  );
            userInput = scan.nextDouble( );
        } while ( userInput <= 10 );

        double resultSquareRoot = userInput;

        while (resultSquareRoot >= 1.01){
            resultSquareRoot = Math.sqrt(resultSquareRoot);

        }
        System.out.println(resultSquareRoot);


    }

你要求的數字大於 10,所以你應該有

do
{
    System.out.println( "Enter a number greater than 10"  );
    userInput = scan.nextDouble( );
} while ( userInput < 10 );

因為您想在一個小於 10 的數字時繼續詢問。

然后在這里,你總是在做Math.sqrt(squareRoot)並將它存儲在resultSquareRoot ,所以你總是在 while 循環內的resultSquareRoot獲得相同的值,因為你永遠不會改變squareRoot的值。 並且您希望您的條件在while it is greater than 1.01

double squareRoot = Math.sqrt(userInput);
double resultSquareRoot = Math.sqrt(squareRoot);

while (resultSquareRoot > 1.01){
    resultSquareRoot = Math.sqrt(resultSquareRoot);
}
System.out.println(resultSquareRoot);

暫無
暫無

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

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