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

时间:2015-10-11 18:17:30

标签: java

所以我从大学到完成运动,我相信我接近它但到目前为止。我不是要求具体的答案,我很想知道如何“覆盖变量?” (不确定这是否是这种行为的正确名称)。

以下是问题:http://pastebin.com/riDYS39D

我遇到的问题是,我不知道如何覆盖在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);



    }

}

2 个答案:

答案 0 :(得分:1)

考虑您的第一个输入变量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);

答案 1 :(得分:0)

你说&#34;随时欢迎任何帮助&#34;所以这是我对你的代码的分析。

通常的做法是将变量声明为尽可能接近其使用,通常这意味着首次分配时,例如:

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');

您的GROSSRATIO应该是50000,而不是500000

你对常量的使用不一致。

  • GROSSRATIO是大写且最终的。完美!
  • allowance1allowance2是小写但不是最终版。
  • 0.200.23未命名为常量。

maritalStatus是一个char,所以这行编译,但绝对不是你想要的,而是你的&#34;奇怪输出的原因&#34; 。只需删除该行:

netPay = (grossPaid * maritalStatus);

您还在没有标签的情况下单独打印maritalStatus。删除它。

您有两个if语句用于分配对等的netPay语句,但编译器没有看到,因此netPay未明确分配。只需将第二个if语句更改为else

未使用

totalTaxPaidgrossAfterAllowance。删除它们。

netPay的计算实际上计算totalTax

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