java - 无法为正确的数学结果制定代码

标签 java math

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

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

它的作用就是从你的美元中扣除你购买的比特币数量。

每次我使用购买功能(输入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");
    }
}

最佳答案

您没有重置比特币变量。

在您运行的第一次迭代中:

bitcoin = bitcoin * buy;

这会将比特币设置为等于4000 * 2

在第二次迭代中,您运行相同的行。然后,这会将比特币设置为等于(4000 * 2) * 2

使用完毕后,您需要将比特币的值重置为4000

您可以在 if 语句末尾重置比特币的值:

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);
    bitcoin = 4000; // this line was added
} else if (choice == 2 && USD >= bitcoin) {

或者更好:

创建一个代表比特币价格的最终静态变量,然后在需要该价格常数的计算中使用它。它看起来像这样:

public class P3a {
    private static final double BITCOIN_VALUE = 4000;

    ...
    // your other code
    ...

    buy = myscanner.nextDouble();
    mywallet.add(buy);
    bitcoin = BITCOIN_VALUE * buy;
    USD = USD - bitcoin;
    System.out.println("you have bought:" + mywallet.numcoins);

    ...

关于java - 无法为正确的数学结果制定代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55670013/

相关文章:

java - 查找 char 数组中出现的所有位置

java - 如何在android中监听后台鼠标点击

java - Tomcat(8.0.32) lib 目录中的 HikariCP(2.4.6) 不记录

algorithm - 寻找相似玩家的加权算法

java - 二维数组按输入排序,然后再排序

java - 文件夹和文件不是由 Linux 下的 Java 代码创建的,但它适用于 Windows

algorithm - 证明算法对于解决游戏是正确的

java - 为什么它是连接而不是算术运算?

c++ - 如何为我的 3d 曲线添加可变性 - openGL/C++ 中的球面坐标

c - 消除模偏差 : how is it achieved in the arc4random_uniform() function?