首页 > 解决方案 > 为正确的数学结果制定代码时遇到问题

问题描述

我编写了一个“买入”和“卖出”比特币的程序,尽管我的买入函数给出了不正确的数学结果。

在我的程序中,我有 20000 美元(双倍美元)和比特币(价值 4000 美元。

它所要做的就是从你的美元中扣除你购买的比特币数量。

每次我使用buy函数(输入1)一次至少买2个,它工作一次,然后计算错误。它从 20000 到 12000(正确),然后从 12000 到 -4000。我无法弄清楚我的代码有什么问题。我知道答案可能很简单,但我觉得我已经尝试了一切。

import java.util.*;

public class P3a {

    public static void main(String[] args) {
        Dates d = new Dates();
        String s = d.getDate();
        System.out.println("Date is" + s);
        W3 mywallet = new W3();
        Scanner myscanner = new Scanner(System.in);
        double buy = 0.0;
        int choice = 0;
        double bitcoin = 4000;
        double USD = 20000;
        while (choice != 5) {
            System.out.println("Welcome! Enter a command. \n"
                    + "Enter 1) Buy Bitcoin \n"
                    + "Enter 2) Sell Bitcoin  \n"
                    + "Enter 3) Print Balance \n"
                    + "Enter 4) Print History \n"
                    + "ENTER 5) Exit Program\n");
            choice = myscanner.nextInt();
            if (choice == 1) {
                System.out.println("How many? ");
                buy = myscanner.nextDouble();
                mywallet.add(buy);
                bitcoin = bitcoin * buy;
                USD = USD - bitcoin;
                System.out.println("you have bought:" + mywallet.numcoins);
                System.out.println(USD);
            } else if (choice == 2 && USD >= bitcoin) {
                System.out.println("How many?");  
                buy = myscanner.nextDouble();
                mywallet.subtract(buy);
                System.out.println("you have sold:" + mywallet.numcoins);
                USD = USD + bitcoin;
                System.out.println(USD);
            } else if (choice == 3) {
                System.out.println("Balance:" + mywallet.numcoins);
            } else if (choice == 4) {
                System.out.println("Print Transaction history");
            } else if (choice == 5) {
                // exit
                break;
            }
        }
        System.out.println("Bye");
    }
}

标签: javamath

解决方案


bitcoin = bitcoin * buy;
USD = USD - bitcoin;

你在这里改变程序的状态。第一次运行后,USD是 12000,但bitcoin变成了 8000。所以下次你做同样的事情时,你会得到意想不到的值。

在 while 循环中使用临时变量,以免覆盖原始变量。实际上,标记bitcoinfinal变量会更好。


推荐阅读