我编写了一个“购买”和“出售”比特币的程序,尽管我的购买函数给出了不正确的数学结果。
在我的程序中,我有 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/