简单Java代码无法按预期工作

时间:2016-11-15 04:03:45

标签: java

我是一名新手程序员,只是学习如何使用递归。很抱歉,如果我的问题非常基本,但我想知道为什么我的代码会输出额外的值。我已多次运行代码,并输出额外的值。代码的要点是取“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

完成。(每个#之间有新行)

2 个答案:

答案 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来达到此目的。

piPrinter:

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

    }

}

I / O示例:

  

static double pi = .314159265359;

     

6 2 8 2 10 18 4 12 10 6 10 18完成。

     

静态双pi = .31415;

     

6 2 8 2 10完成。