java - 为正确的数学结果制定代码时遇到问题
问题描述
我编写了一个“买入”和“卖出”比特币的程序,尽管我的买入函数给出了不正确的数学结果。
在我的程序中,我有 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");
}
}
解决方案
bitcoin = bitcoin * buy;
USD = USD - bitcoin;
你在这里改变程序的状态。第一次运行后,USD
是 12000,但bitcoin
变成了 8000。所以下次你做同样的事情时,你会得到意想不到的值。
在 while 循环中使用临时变量,以免覆盖原始变量。实际上,标记bitcoin
为final
变量会更好。
推荐阅读
- java - Selenium:由于线程错误,无法滚动到单击不可见的元素:元素不可见
- firebase - TypeError:functions.pubsub.schedule 不是函数
- ruby-on-rails - 调用 `format.js` 导致“找不到模板”警告
- javascript - 链二选择 Angular Guard 中的 rxjs 存储
- sql - Django:如何知道原始 sql 和模型查询集所用的时间
- javascript - 在 TypeScript 中从数组中累积映射
- java - 您可以创建一个单独的方法来创建 JFrame 大小吗?
- python - 如何在 QWidget 中居中背景图像
- c# - SonarScanner 未在 SonarQube 中发布结果
- javascript - 如何通过加 2 修复未返回长度字符串值的“截断字符串”