我遇到了将PHP脚本转移到Java的问题。我正在使用谐波系列。我有它在PHP中工作,但当我将它转换为Java时,它永远不会结束(无限循环)。有任何想法吗?或者甚至是更好的方法来完成它?
PHP:
<?php
$current = 0;
$num = 2.5;
while($current < $num) {
for($i = 1; $current < $num; $i++) {
$current = $current + (1 / $i);
}
// this ($current) will return "2.5928571428571" (which it should)
echo $current;
}
?>
Java(相当于Java,但没有完成循环):
double current = 0;
double num = 2.5;
int i = 0;
while(current < num) {
for(i = 1; current < num; i++) {
current = current + (1 / i);
}
System.out.println(current);
}
或许我完全做错了:o。
答案 0 :(得分:2)
电流永远不会超过1,因为1 / n = 0,其中n> 1。
几点:
答案 1 :(得分:1)
使用双数,而不是整数,因为int division会做有趣的事情。
分数使用int文字,而int division 必须返回一个int,在你的情况下,如果i&gt;它通常会返回0。 1
即,
current = current + (1 / i); // will return current + 0 if i > 1
最好通过将1更改为1.0来使分子成为双字面值:
current = current + (1.0 / i);
现在双师将按照你的期望做分。
答案 2 :(得分:0)
问题在于类型转换。在这种情况下,PHP并不关心类型,因此它可以在那里工作。
另一方面,在Java中,您需要强制部门中的double
类型才能实现此目的。
double current = 0;
double num = 2.5;
int i = 0;
while(current < num) {
for(i = 1; current < num; i++) {
current += (1.0 / i); // Force the result to be a decimal with 1.0
}
System.out.println(current);
}
或者,您可以i
double
开始。
...
for(double i = 1.0; current < num; i+=1.0)
current += 1.0/i;
答案 3 :(得分:0)
创建一个中间变量,以查看总和是否是问题并且能够进行调试。
double current = 0;
double num = 2.5;
double inc;
while(current < num) {
for(int i = 1; current < num; i++) {
inc = 1 / (double)i;
current += inc;
}
System.out.println(current);
}
如果它解决了您的问题,最终的代码可以是
double current = 0;
double num = 2.5;
while(current < num) {
for(int i = 1; current < num; i++) {
current += (1 / (double)i);
}
System.out.println(current);
}
答案 4 :(得分:0)
int / int = int(如果结果是假设.07 int不能保存浮点数它将为0)所以
int / float = float(希望你有)