多个while循环比较(BigDecimal和> 10)

时间:2013-10-23 02:42:38

标签: java bigdecimal compareto

这是我的第一篇文章,过去24小时我一直在搜索谷歌和堆栈溢出,似乎无法解决我的问题。

我正在创建一个简单的平方根程序。对于输入部分,我启动一个'while'循环。我需要它来比较两个条件。 1.是输入数字 2.输入数字超过十。

我成功创建了原始程序,但是在调试时我遇到了一个小问题。当我输入一个变大的十进制或数字时,我会得到一个运行时错误。

我发现我可以使用BigDecimal()来解决这个问题。

然而,我现在遇到一个逻辑错误,无论我多少次搜索互联网,我都无法解决。

我在while循环中使用的两个条件是:

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

这将确保存在BigDecimal,但不会确保输入的数字超过十。

这是整个计划

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 );

}

非常感谢任何和所有帮助。

-Mike

1 个答案:

答案 0 :(得分:0)

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

在你while循环使你的逻辑工作之前,这些都有可能。

此外,

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

我可以看到这会导致问题。您应该使用&&代替||