0

我真笨。

import java.util.Scanner;
public class ATM {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double withdraw = scanner.nextDouble();
double balance = scanner.nextDouble();
int withdraw = 0; int balance;
if (withdraw % 5 == 0 && withdraw<(balance-.5)) {
    balance = balance - (withdraw + .5); 
    System.out.println(balance);
}
 else {
     System.out.println(balance);
 }}}

我正在努力使余额被提款金额减去,同时产生 0.50 美元的费用。不幸的是,它一直只减去 $.50 而不减去提款。提前致谢。

固定代码

import java.util.Scanner;
public class ATM {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
double withdraw = scanner.nextDouble();
double balance = scanner.nextDouble();
if (withdraw % 5 == 0 && withdraw<(balance-.5)) {
    balance -= (withdraw + .5); 
    System.out.println(balance);
}
 else {
     System.out.println(balance);
 }}}
4

3 回答 3

2

这是算法https://stackoverflow.com/a/14387552/1083704

您有同样的问题 - 复杂表达式中的错误,包括使用未知类型。而且你必须做同样的事情来调试你的程序——使用中间变量将 oneliner 简化为多个简单的表达式。然后您可以逐步调试您的代码并观察这些中间值。成为程序员意味着成为黑客,不学习调试就不会成为黑客。

于 2013-01-18T23:56:43.050 回答
0

你在哪里设置withdraw变量?我会看那里,听起来您正在将 0.5 添加到尚未分配大于 0 的值的变量中。在更复杂的代码中进行测试的一种真正简单的方法是在代码中设置撤消说在平衡方程中使用它之前的值 5,这样你就可以判断问题是出在你的方程还是出在变量上,虽然方程看起来很可靠。另外,你可以做

balance -= (withdraw + .5)
于 2013-01-18T23:49:07.510 回答
0

当信息如此之少时,调试代码是相当困难的;但我最好的猜测是一个初始化错误——withdraw没有被正确初始化,只是我假设它的默认值,0

但可以肯定的是,我们需要在您的打印声明之前知道提款等于什么。您可以在添加余额之前添加打印语句,如下所示:

System.out.println(withdraw);
balance -= (withdraw + .5);
System.out.println(balance);

然后在运行时查看withdraw是否> 0?如果不; 在计算余额之前检查它是否设置为您的提款值。

更好的是发布您的完整代码片段,所以我猜我们可以看到自己。

注意 a -= b 是 a = a - b 的简写

于 2013-01-18T23:53:03.840 回答