我是一名新手程序员,只是学习如何使用递归。很抱歉,如果我的问题非常基本,但我想知道为什么我的代码会输出额外的值。我已多次运行代码,并输出额外的值。代码的要点是取“Pi”并取数字和“x2”。所以,3.1415 = 6 2 8 2 10.我得到的输出如下,谢谢你的帮助!
public class printPi
{
static int x = 1;
static double pi = .314159265359;
public static void main(String[] args)
{
piPrinter(pi);
}
public static void piPrinter(double pi01)
{
if(x!=0)
{
pi = pi*10;
x = (int)(pi%10);
x=x*2;
System.out.println(x);
piPrinter(pi);
}
else
System.out.println("done.");
}
}
我的输出:
6
2
8
2
10
18
4
12
10
6
10
16
18
18
18
18
12
12
12
0
完成。(每个#之间有新行)
答案 0 :(得分:1)
尝试仅评估点左侧的数字和"删除"它在println之后。
像这样:public class printPi
{
public static void main(String[] args)
{
double pi = 3.14159265359;
piPrinter(pi);
}
public static void piPrinter(double pi01)
{
if ((int) pi01 != 0) {
System.out.println((int) pi01 * 2);
piPrinter((pi01 - (int) pi01) * 10);
} else {
System.out.println("done.");
}
}
}
答案 1 :(得分:0)
1)您的pi
值每次都在变化,所以我设置count
来限制迭代次数。
2)由于您无法将精度设置为Double
,(pi*=10
)无法获得正确的输出,但您可以使用BigDecimal来达到此目的。
import java.math.BigDecimal;
import java.math.RoundingMode;
public class printPi
{
static int x = 1;
static double pi = .314159265359;
static int piLength = Double.toString ( pi ).length ( ) -1 ;
public static void main(String[] args)
{
piPrinter(pi, 1);
}
public static void piPrinter(double pi01, int count)
{
if(count < piLength)
{
pi = pi*10;
Double truncated = BigDecimal.valueOf(pi)
.setScale(3, RoundingMode.HALF_UP)
.doubleValue();
x = (int)(truncated%10);
x=x*2;
System.out.println ( x );
piPrinter(pi, count+1);
}
else
System.out.println("done.");
}
}
static double pi = .314159265359;
6 2 8 2 10 18 4 12 10 6 10 18完成。
静态双pi = .31415;
6 2 8 2 10完成。