Java 程序的奇怪输出,太愚蠢而无法解决:c

Java 程序的奇怪输出,太愚蠢而无法解决:c,java,Java,所以我从一所大学开始就一直在锻炼,我相信我已经接近了,但到目前为止。我不是问一个具体的答案,我想知道如何覆盖一个变量?我不确定这是否是这种行为的正确名称 问题是: 我遇到的问题是,我不知道如何准确地覆盖if语句中创建的变量中的数据 代码,任何帮助都是欢迎的 import java.util.Scanner; public static void main(String[] args) { Scanner input = new Scanner(System.in); do

所以我从一所大学开始就一直在锻炼,我相信我已经接近了,但到目前为止。我不是问一个具体的答案,我想知道如何覆盖一个变量?我不确定这是否是这种行为的正确名称

问题是:

我遇到的问题是,我不知道如何准确地覆盖if语句中创建的变量中的数据

代码,任何帮助都是欢迎的

import java.util.Scanner;



public static void main(String[] args) {

    Scanner input = new Scanner(System.in);
    double grossPaid, allowance1, allowance2, totalTaxPaid, netPay, grossAfterAllowance;
    double taxSaved;
    final double GROSSRATIO;
    String idNumber, name, address, strln;
    char maritalStatus;
    allowance1 = 25000;
    allowance2 = 20000;
    GROSSRATIO = 500000;

    taxSaved = 0.00;




    /* trash
    grossAfterAllowance = grossPaid - allowanceGiven;
    totalTaxPaid = grossAfterAllowance - netPay;
    */


    System.out.println("Enter your employee identification number: ");
    idNumber = input.nextLine();

    System.out.println("Enter your name: ");
    name = input.nextLine();

    System.out.println("Enter your address: ");
    address = input.nextLine();

    System.out.println("Enter your marital status: ");
    strln = input.next();
    maritalStatus = strln.charAt(0);
        if (maritalStatus == 'S')                                                                                                          
            taxSaved = 0.20;

        if (maritalStatus == 'M')
            taxSaved = 0.23;





    System.out.println("Enter your gross payment: ");
    grossPaid = input.nextDouble();
       if (grossPaid < GROSSRATIO)
        netPay = (grossPaid - allowance1) * taxSaved;

         if (grossPaid >= GROSSRATIO)
        netPay = (grossPaid - allowance2) * taxSaved;




    System.out.println(maritalStatus);
    netPay = (grossPaid * maritalStatus);
    System.out.println("Name: " + name);
    System.out.println("ID: " + idNumber);
    System.out.println("Address: " + address);
    System.out.println("Marital Status: " + strln);
    System.out.println("Gross Payment: " + grossPaid);
    System.out.println("Net pay: " + netPay);



    }

}

考虑到您的第一个输入变量idNumber,以下是覆盖变量的方式:

String idNumber = "";
System.out.println("Enter your employee identification number: ");
idNumber = input.nextLine();
System.out.println("ID Number: " + idNumber);

System.out.println("Enter your updated employee identification number: ");
idNumber = input.nextLine();
System.out.println("Updated ID Number: " + idNumber);
您说过随时欢迎任何帮助,所以下面是我对您的代码的分析

通常情况下,声明变量时应尽可能接近其用法,这通常意味着首次赋值时,例如:

String address = input.nextLine();
婚姻状况应该是小写的“s”或“m”。您应该使用nextLine并验证它,例如

char maritalStatus;
do {
    System.out.println("Enter your marital status (s/m):");
    String line = input.nextLine();
    maritalStatus = (line.length() == 1 ? line.charAt(0) : '?');
} while (maritalStatus != 's' && maritalStatus != 'm');
你的总收入应该是50000,而不是500000

您对常量的使用不一致

GROSSRATIO是大写的和最终的。完美的 allowance1和allowance2是小写的,不是最终的。 0.20和0.23不是命名常量。 maritalStatus是一个char,所以这行代码可以编译,但肯定不是您想要的,这是您奇怪输出的原因。只需删除该行:

netPay = (grossPaid * maritalStatus);
您还可以在不带标签的情况下自行打印maritalStatus。移除它

您有两个if语句用于分配netPay,它们是相反的,但编译器并没有看到,所以netPay并没有被明确分配。只需将第二个if语句更改为else

未使用总已纳税额和总已纳税额。移除它们

净付的计算实际上是计算总税


您没有打印所有必需的输出。

变量是否已保存?嗯。。但taxSaved不是在if语句中创建的?@eis我希望数据从if语句移到顶部,这就是我想知道的,这到底是什么意思mean@eis这是一个用词不当。变量在保存的行double taxSaved中声明;,它最初是在if语句中赋值的。因为它在逻辑上不存在于两者之间,所以它在哪里创建是一个意见问题,如果有的话。-所以,对于OP:Objects是创建的,variables不是,它们是声明和赋值的。你没有读过我的问题,我不知道如何确切地覆盖在if语句中创建的变量中的数据。i、 e taxSavedUmm…它不是在if语句中创建的。它被分配了一个值,我想你仍然可以用你想要的任何值覆盖它,有什么问题吗?好的,所以我改变了一些东西,我不能使用'do,while'等突出,因为我们还没有关于它的讲座:v,它现在似乎正在工作,谢谢!