在下面的代码中,如果我放置一个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);
答案 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
这就是原因。
如果number
和root
都不是double
,那么您就有整数除法。根据你的目的,这可能是不可取的。
如果number
或root
double
,那么您可能会出现一些浮点不准确的情况 - 有时,浮点数商不会完全等于整数。
这带来了另一种情况:
root
是双倍的,那么可能会在执行++root
时遇到问题。尝试增加浮点值时,这有点令人担忧。尽管如此,我们还是会对这些变量的真实类型进行猜测。但是,我们假设为了论证,number
是double
,root
是int
。根据你想要做的事情,你可能想要将你的平等改为不平等,以检查它是否小于或等于,或者你可能想要完全重写你的比较。
答案 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);