增加IF声明

时间:2014-02-23 18:05:28

标签: java if-statement increment do-while

在下面的代码中,如果我放置一个if语句告诉它增加if,为什么它不起作用 “root< 101;”。我一直在为此主演,无法弄清楚为什么它不喜欢这样。 这只是因为范围界定吗?

do {
    ++root;
    if ((number / root) == root) {
        System.out.printf("\nThe square root of %.0f is %.0f.\n", number, root);
        root = 101;
    } else if (root == 101) {
        System.out.printf(
                "The number %.0f does not have a square root.\n", number);
    }
} while (root < 101);       

如:

do {
    if ((number / root) == root) {
        System.out.printf("\nThe square root of %.0f is %.0f.\n", number, root);
        root = 101;
    } else if (root < 101) {
        ++root;
    } else {
        System.out.printf(
                "The number %.0f does not have a square root.\n", number);
    }
} while (root < 101);

3 个答案:

答案 0 :(得分:0)

所以通常这是预期的行为 - 你的中间if语句达到了循环的退出条件。基本上,最后一个if永远不会执行,因为root永远不会大于或等于101。

试试这段代码:

do {
    if ((number / root) == root) {
        System.out.printf("\nThe square root of %.0f is %.0f.\n",number, root);
        break;
    }
} while (++root < 101);

if( root == 101) {
    System.out.printf("The number %.0f does not have a square root.\n", number);
}

答案 1 :(得分:0)

这个布尔表达让我担心:

(number / root) == root

这就是原因。

  • 如果numberroot都不是double,那么您就有整数除法。根据你的目的,这可能是不可取的。

  • 如果numberroot double,那么您可能会出现一些浮点不准确的情况 - 有时,浮点数商不会完全等于整数。

    这带来了另一种情况:

    • 如果root是双倍的,那么可能会在执行++root时遇到问题。尝试增加浮点值时,这有点令人担忧。

尽管如此,我们还是会对这些变量的真实类型进行猜测。但是,我们假设为了论证,numberdoublerootint。根据你想要做的事情,你可能想要将你的平等改为不平等,以检查它是否小于或等于,或者你可能想要完全重写你的比较。

答案 2 :(得分:0)

您的代码使您尝试实现的非常简单的功能变得复杂。你使用do-while循环与嵌套的if结构相结合会让我(当然你)比你需要的更令人头痛。如果没有看到完整的代码,就很难理解出现了什么问题。

我注意到的第一件事(在你的第二个代码块中)是你有可能无限循环。考虑root是一个大于或等于101的数字的情况。你的代码将默认为最终的else语句并无限打印:

 The number ___ does not have a square root.

现在,如果我正确理解您的代码,那么您正在尝试计算一个数字的平方根,最大根数为100.这里有一个更好的代码实现:

 public void printSquareRoot(int number, int max_root) {
     int root = 1; // note it's important to start at 1 
     while ( root <= max_root ) {
         if ( (number / root) == root) {
             System.out.printf("\nThe square root of %.0f is %.0f.\n",number, root);
             return; // we can quit out of the function
         }
         root++; // here we are incrementing to the next root
     }

     // Notice that if we reach this line of code then 
     // no root was found for the number
     System.out.printf("The number %.0f does not have a square root.\n", number);
 }

在您的代码中,我会将此函数称为数字,您希望计算平方根, max_root 您希望尝试的最大根数。例如,如果要计算25的平方根,直到最大根数为100:

printSquareRoot(25, 100);