0

これは私の最初の投稿であり、過去 24 時間にわたって Google とスタック オーバーフローを検索してきましたが、問題を突き止めることができないようです。

単純な平方根プログラムを作成しています。入力セクションでは、「while」ループを開始します。2つの条件を比較するために必要です。1. は数字の入力です。 2. は 10 以上の数字の入力です。

元のプログラムの作成には成功しましたが、デバッグ中に小さな問題が発生しました。大きな小数または数値を変更すると、実行時エラーが発生します。

BigDecimal() を使用してこの問題を解決できることを発見しました。

しかし、インターネットを何度検索しても解決できない論理エラーが発生しています。

while ループで使用する 2 つの条件は次のとおりです。

    while (!scan.hasNextBigDecimal() || (inputNumberBig.compareTo(SENTINAL)>0))

これにより、BigDecimal が存在することが確認されますが、入力数値が 10 を超えることは確認されません。

全プログラムはこちら

import java.math.BigDecimal;
import java.util.Scanner;

/**
 @author Mike
 */

public class SquareRootingWithoutBigDecimal 
{
public static void main( String [] args )
{
    Scanner scan = new Scanner(System.in);
    double inputNumber = 0.00;
    double rootedNumber = inputNumber;

     BigDecimal inputNumberBig = new BigDecimal(0.00);
     BigDecimal SENTINAL = new BigDecimal(10.00);
     String garbage;
     double garbageD = 0.00;


        System.out.println("Please Enter a number to be Square rooted"
            + "\nThe number must be 10 or greater ");       
        while (!scan.hasNextBigDecimal() || (inputNumberBig.compareTo(SENTINAL)>0))
        {

        garbage = scan.nextLine();
        System.out.println("Please Enter a number to be Square rooted"
            + "\nThe number must be 10 or greater ");
        }

    inputNumberBig = scan.nextBigDecimal();
    inputNumber = inputNumberBig.doubleValue();  



    rootedNumber = inputNumber;
    do
    {
        rootedNumber = Math.sqrt(rootedNumber);
        System.out.println(rootedNumber);

    } while (rootedNumber >= 1.01 );

}

どんな助けでも大歓迎です。

-マイク

4

1 に答える 1

0
inputNumberBig = scan.nextBigDecimal();
inputNumber = inputNumberBig.doubleValue();

これらwhileは、ロジックが機能するためにループする前に実行する必要があります。

また、

while (!scan.hasNextBigDecimal() || (inputNumberBig.compareTo(SENTINAL)>0))

これが問題を引き起こしていることがわかりました。&&代わりに使用する必要があります||

于 2013-10-23T02:59:48.877 に答える