初学者Java程序员算术错误 我最近开始从事java编程,并把自己当作编程新手。看来我的源代码算法有问题。我已经验证了所有嵌套的if-else语句,它们都符合最终else语句的算法。它计算不正确,我已经按照上面的if-else语句设置了算法

初学者Java程序员算术错误 我最近开始从事java编程,并把自己当作编程新手。看来我的源代码算法有问题。我已经验证了所有嵌套的if-else语句,它们都符合最终else语句的算法。它计算不正确,我已经按照上面的if-else语句设置了算法,java,math,integer-arithmetic,Java,Math,Integer Arithmetic,else语句假定从金额中减去40,然后应用1%的费用。我已经尝试了else语句fee=((checkAmount-40)*.01)和fee=((checkAmount*.01)-40) 这只是本书中的一个练习 import java.util.Scanner; public class ServiceCharge { public static void main(String[] args) { double checkAmount; double fee; Sca

else语句假定从金额中减去40,然后应用1%的费用。我已经尝试了else语句
fee=((checkAmount-40)*.01)
fee=((checkAmount*.01)-40)

这只是本书中的一个练习

  import java.util.Scanner;
public class ServiceCharge {
public static void main(String[] args)
{
    double checkAmount;
    double fee;
    Scanner kb = new Scanner(System.in);
    System.out.println("I will calulate the service charge to cash your check");
    System.out.print("Enter amount of check: $");
    checkAmount = kb.nextDouble();

    if (checkAmount > 0)
    {
        if (checkAmount <= 10)
        {
            fee = -1;
            System.out.println("$1 service charge");
            checkAmount = checkAmount + fee;
            System.err.println("You have " + checkAmount + " left after service charge.");
        }
        else if ((checkAmount > 10) && (checkAmount <= 100))
        {
            System.out.println("There will be a 10 percent charge.");
            fee = (checkAmount * .10);
            checkAmount = checkAmount - fee;
            System.out.printf("Processing fee: $%.2f\n" , fee);
            System.out.printf("Check amount: $%.2f\n" , checkAmount);
        }
        else if ((checkAmount > 100) && (checkAmount <= 1000))
        {
            System.out.println("There will be a $5 charge plus 5 percent");
            fee = ((checkAmount - 5) * .05);
            checkAmount = (checkAmount - fee);
            System.out.printf("Processing fee: $%.2f\n" , fee);
            System.out.printf("Check amount: $%.2f\n", checkAmount);
        }
        else
        {
            System.out.println("$40 processing fee plus 1 percent");
            fee = ((checkAmount - 40) * .01);
            checkAmount = (checkAmount - fee);
            System.out.printf("Processing fee: $%.2f\n" , fee);
            System.out.printf("Check amount: $%.2f\n" , checkAmount);
        }
        System.out.println("Thanks for using Service Charger." + "\nGood bye");
    }
}
}
import java.util.Scanner;
公共课服务费{
公共静态void main(字符串[]args)
{
双重支票金额;
双倍收费;
扫描仪kb=新扫描仪(System.in);
System.out.println(“我将计算服务费以兑现您的支票”);
System.out.print(“输入支票金额:$”;
checkAmount=kb.nextDouble();
如果(支票金额>0)
{
如果(支票金额10)和(支票金额100)和(支票金额
这不是40美元+1%的费用。这是略低于1%的费用;这就像你免费兑现前40美元,然后对其余部分收取1%的费用

假设1%的费用适用于整张支票,而不是减去40美元后剩下的钱,那么正确的费用表达式是

            fee = 40 + 0.01*checkAmount;

实际上,根据您最初的表达,您只想收取支票金额的1%费用减去40美元的固定费用,因此表达应该是:

fee = 40 + (checkAmount - 40) * .01;
您的代码中存在大量重复,这使得查看发生了什么变得更加困难,如果您决定更改—例如—您想向用户显示的消息,您现在需要在4个位置进行更改,并且有一个很大的更改,您忘记在某处执行,或者您输入了一个错误

良好编程的目标之一是尽可能避免重复

public class ServiceCharge {
    public static void main(String[] args) {

        Scanner kb = new Scanner(System.in);
        System.out.println("I will calulate the service charge to cash your check");
        System.out.print("Enter amount of check: $");
        double checkAmount = kb.nextDouble();

        if (checkAmount > 0) {
            double fee;
            String feeMessage;
            if (checkAmount <= 10) {
                fee = 1;
                feeMessage = "$1 service charge";
            } else if ((checkAmount > 10) && (checkAmount <= 100)) {
                feeMessage = "10 percent charge.";
                fee = (checkAmount * .10);
            } else if ((checkAmount > 100) && (checkAmount <= 1000)) {
                feeMessage = "$5 charge plus 5 percent";
                fee = 5 + ((checkAmount - 5) * .05);
            } else {
                feeMessage = "$40 processing fee plus 1 percent";
                fee = 40 + ((checkAmount - 40) * .01);
            }
            checkAmount = checkAmount - fee;

            System.out.printf("Fee structure: " + feeMessage);
            System.out.printf("Processing fee: $%.2f\n", fee);
            System.out.printf("Check amount: $%.2f\n", checkAmount);
            System.out.println("Thanks for using Service Charger.\nGood bye");
        }
    }
}
公共类服务费{
公共静态void main(字符串[]args){
扫描仪kb=新扫描仪(System.in);
System.out.println(“我将计算服务费以兑现您的支票”);
System.out.print(“输入支票金额:$”;
double checkAmount=kb.nextDouble();
如果(支票金额>0){
双倍收费;
字符串消息;

如果(checkAmount 10)&(checkAmount 100)&&(checkAmount用于最后一个else语句,它似乎与您的其余语句有点不一致。您使用的是“hold”要存储原始的
checkAmount
值,然后修改
checkAmount
作为前三条语句的费用。您应该将最后一条语句建模为前一条语句。
checkAmount
应该是
checkAmount=(checkAmount*.01)+40
,则
hold-checkAmount
应返回您正在查找的值。通过使用
checkAmount=checkAmount-40
,最后一行返回hold
(checkAmount)-(checkAmount-40)
,它将始终返回
40

实际发生了什么?出现了什么明显的错误?您是否收到错误消息?如果收到,请将其显示给我们。您是否收到错误结果?如果收到,请将其显示给我们,并向我们显示应该发生的情况。您离浮点错误还有多远?您知道吗?40加1%的费用是
费用=40+支票金额*0.01;checkAmount-=fee;
,对吗?虽然你可能是编程新手,但我认为你在学校学过一些数学。仅仅因为你在学校学过,并不意味着它也不适用于编程。谢谢你的澄清。
public class ServiceCharge {
    public static void main(String[] args) {

        Scanner kb = new Scanner(System.in);
        System.out.println("I will calulate the service charge to cash your check");
        System.out.print("Enter amount of check: $");
        double checkAmount = kb.nextDouble();

        if (checkAmount > 0) {
            double fee;
            String feeMessage;
            if (checkAmount <= 10) {
                fee = 1;
                feeMessage = "$1 service charge";
            } else if ((checkAmount > 10) && (checkAmount <= 100)) {
                feeMessage = "10 percent charge.";
                fee = (checkAmount * .10);
            } else if ((checkAmount > 100) && (checkAmount <= 1000)) {
                feeMessage = "$5 charge plus 5 percent";
                fee = 5 + ((checkAmount - 5) * .05);
            } else {
                feeMessage = "$40 processing fee plus 1 percent";
                fee = 40 + ((checkAmount - 40) * .01);
            }
            checkAmount = checkAmount - fee;

            System.out.printf("Fee structure: " + feeMessage);
            System.out.printf("Processing fee: $%.2f\n", fee);
            System.out.printf("Check amount: $%.2f\n", checkAmount);
            System.out.println("Thanks for using Service Charger.\nGood bye");
        }
    }
}