尽管我的购买功能给出了不正确的数学结果,但我编写了一个“购买”和“出售”比特币的程序。
在我的程序中,我有20000美元(双美元)和比特币(价值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");
}
}
答案 0 :(得分:1)
bitcoin = bitcoin * buy;
USD = USD - bitcoin;
您正在此处更改程序的状态。第一次运行后,USD
为12000,但是bitcoin
为8000。因此,下次执行相同的操作时,将得到意外的值。
在while循环内使用临时变量,以使原始变量不会被覆盖。实际上,最好将bitcoin
标记为final
变量。
答案 1 :(得分:1)
您没有重置bitcoin
变量。
在第一次迭代中运行:
bitcoin = bitcoin * buy;
这会将bitcoin
设置为等于4000 * 2
。
在第二次迭代中,您运行同一行。然后,这会将bitcoin
设置为等于(4000 * 2) * 2
。
使用完毕后,您需要将bitcoin
的值重置为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);
...