您可以执行以下操作:
我是Java的新手,他正在实验室中练习简单的类层次结构以及实现和继承的使用。我将Main.Java作为驱动程序,将Taxpayer.Java作为超类,并且我正在将WeeklyTaxPayer.java作为三个子类的第一个。 WeeklyTaxPayer子类具有公共的computeStateTax方法,该方法当然会根据用户输入的内容来计算税额。]
我一直坚持要获取子类中的内容以进行打印。指示说明如下:
“ WeeklyTaxpayer类必须具有连接在一起的公共toString方法,并返回以下内容:通过调用父类toString方法以获取包含WeeklyTaxpayer实例的所有成员变量的值而返回的字符串。”] >
[TaxPayer超类中有一个公共的String toString()方法,该方法可打印出其余的用户信息(名称,ssn,总薪水,但我无法得到它来打印子类应计算的税额。] >
在WeeklyTaxPayer子类中,我具有:
@Override public String toString(){ return super.toString() + df.format(computeWeeklyTax(grossPay, taxPayerType));
但是税收的收益始终为零。让我知道是否应该添加我的代码,我是该网站的新手,也不希望它太长。谢谢您的帮助。
Updated
(注意:我意识到,在TaxPayer和Main中找到的ComputeTax()方法将得出零,但是实验室在创建WeeklyTax子类之前要求它为零。除了返回0.0之外什么都不做。”我以为是这样做的,因为我的computeWeeklyTax方法会以某种方式覆盖它)
TaxPayer.Java
import java.text.DecimalFormat; public class Taxpayer { // Instance variables protected String name; protected int ssNumber; protected double grossPay; protected static DecimalFormat df = new DecimalFormat("$#,###.00"); /** * Constructor * * @param name - name of the tax payer * * @param ssN - ssN of the tax payer * @param gp - gross pay */ public Taxpayer(String name, int ssN, double gp) { this.name = name; this.ssNumber = ssN; this.grossPay = gp; } /** * Returns the name */ public String getName() { return name; } /** * Returns the ssNumber */ public String getSSNumber() { String ssnStr = ssNumber + ""; ssnStr = ssnStr.substring(0, 3) + "-" + ssnStr.substring(3, 6) + "-" + ssnStr.substring(6); return ssnStr; } /** * Returns the taxRate */ /** * Returns the grossPay */ public double getGrossPay() { return grossPay; } /** * Computes the tax and returns it * @return */ public double computeTax() { return (getGrossPay() - getGrossPay()); } public String toString() { return "Taxpayer Name: " + name + ", SSN: " + getSSNumber() + "Taxpayer Type: " + this.getClass().getName() + ", Gross Pay: " + df.format(grossPay) + ", Tax payable: " + df.format(computeTax()); } }
WeeklyTaxPayer.Java:
public class WeeklyTaxpayer extends Taxpayer{ public WeeklyTaxpayer(String name, int ssN, double gp) { super(name, ssN, gp); } public double computeWeeklyTax(double gp, char taxPayerType){ double stateTax = 0; while (taxPayerType == 'W') { if ((grossPay >= 0) || (grossPay < 154)) { stateTax = grossPay - 0; stateTax = grossPay * .0400; stateTax = grossPay + 0; } else if ((grossPay >= 154) || (grossPay < 212)) { stateTax = grossPay - 154; stateTax = grossPay * .0450; stateTax = grossPay + 6.15; } else if ((grossPay >= 212)||(grossPay < 250)) { stateTax = grossPay - 212; stateTax = grossPay * .0525; stateTax = grossPay + 8.75; } else if ((grossPay >= 250)||(grossPay < 385)) { stateTax = grossPay - 250; stateTax = grossPay * .0590; stateTax = grossPay + 10.77; } else if ((grossPay >= 385)||(grossPay < 1731)) { stateTax = grossPay - 385; stateTax = grossPay * .0685; stateTax = grossPay + 18.71; } else if ((grossPay >= 1731)||(grossPay < 1923)) { stateTax = grossPay - 1731; stateTax = grossPay * .0764; stateTax = grossPay + 110.92; } else if ((grossPay >= 1923)||(grossPay < 2885)) { stateTax = grossPay - 1923; stateTax = grossPay * .0814; stateTax = grossPay + 125.62; } else if ((grossPay >= 2885)) { stateTax = grossPay - 2885; stateTax = grossPay * .0935; stateTax = grossPay + 203.92; } } return stateTax; } public char taxPayerType; @Override public String toString() { return super.toString() + df.format(computeWeeklyTax(grossPay, taxPayerType)); } }
Main.Java:
import javax.swing.*; import java.text.*; public class Main { public static String getTaxpayerTypeName(char taxPayerType) { // based on the value of taxPayerType, returning full type name if (taxPayerType == 'W') { return "Weekly"; } else if (taxPayerType == 'B') { return "Biweekly"; } else if (taxPayerType == 'M') { return "Monthly"; } else { return "Try Again!"; } } /** Creates a new instance of Main */ public Main() { } /** * @param args the command line arguments */ public static void main( String[] args ) { String Type = ""; String taxType = ""; final int MAX_NUMBER = 5; Taxpayer t1 = null; // Variable to hold an instance of the Taxpayer class Taxpayer t2 = null; // Same as above Taxpayer t3 = null; // Same Taxpayer t4 = null; // Same Taxpayer t5 = null; // Same Taxpayer t = null; DecimalFormat prec2 = new DecimalFormat("$#.00"); DecimalFormat prec1 = new DecimalFormat("#.0%"); String nameStr = ""; // Holds taxpayer name entered by user String ssnNumStr = ""; // Holds taxpayer's SSNnumber as string, entered by user int ssnNum = 0; // Taxpayer's ssnumber as int String tRateStr = ""; // Taxpayer's tax rate as string, entered by user double trate = 0.0; // Taxpayer's tax rate as double String grossStr = ""; // Taxpayer's gross pay as string, entered by user double grossPay = 0.0; // Taxpayer's gross pay as double int count = 0; // The number of taxpayers created String outputStr = ""; // String for output display to user String outputStr2 = "";// String for output display to user String msgStr = ""; // Holds message for display to user int resp = 0; // User's response from showConfirmDialog method while (true) { // Loop to input data on each taxpayer count++; // Read in name from user as a string nameStr = JOptionPane.showInputDialog("Enter taxpayer name"); Type = JOptionPane .showInputDialog("Enter CAPITALIZED LETTER for your type: W for Weekly, B for BiWeekly, M for Monthly: "); char taxPayerType = Type.charAt(0); taxType = getTaxpayerTypeName(taxPayerType); // Read in ID number from user as a string ssnNumStr = JOptionPane.showInputDialog("Enter SSN number"); // Convert from type String to type int ssnNum = Integer.parseInt(ssnNumStr.trim()); // Read in gross pay from user as a string grossStr = JOptionPane.showInputDialog("Enter gross pay"); // Convert from type String to type double grossPay = Double.parseDouble(grossStr.trim()); switch (taxPayerType) { case 'W': t = new WeeklyTaxpayer(nameStr, ssnNum, grossPay); // case 'B': t = new BiWeeklyTaxpayer(nameStr, ssnNum, grossPay);; // case 'M': t = new MonthlyTaxpayer(nameStr, ssnNum, grossPay);; } // Assign new Taxpayer object to next available Taxpayer variable switch (count) { case 1: t1 = t; break; case 2: t2 = t; break; case 3: t3 = t; break; case 4: t4 = t; break; case 5: t5 = t; break; } outputStr += count + ". " + t.toString() + "\n"; if (count < MAX_NUMBER) { msgStr = "\nMax number of allowed taxpayers is: " + MAX_NUMBER + "\nContinue?"; resp = JOptionPane.showConfirmDialog(null, outputStr + msgStr, "Confirm", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if (resp == JOptionPane.NO_OPTION) break; } else { msgStr = "Program cannot handle any more additional taxpayers."; JOptionPane.showMessageDialog(null, outputStr + msgStr, "Results", JOptionPane.INFORMATION_MESSAGE); break; } } outputStr2 = "Taxpayer list:\n"; for (int i = 1; i <= count; i++){ switch (i) { case 1: t = t1; break; case 2: t = t2; break; case 3: t = t3; break; case 4: t = t4; break; case 5: t = t5; break; } outputStr2 += "\n" + i + ". " + t.getName() + "\nTaxpayer Type: " + t.getClass().getName() + "\n SSN: " + t.getSSNumber() + "\n Gross Pay: " + prec2.format(t.getGrossPay()) + "\n Tax for Pay Period: " + prec2.format(t.computeTax()) + "\n"; } JOptionPane.showMessageDialog(null, outputStr2, "TAXPAYERS", JOptionPane.INFORMATION_MESSAGE); } }
我是Java的新手,他正在实验室中练习简单的类层次结构以及实现和继承的使用。我有Main.Java作为驱动程序,Taxpayer.Java是超类,并且...
您可以执行以下操作:
class Parent { int x, y; public Parent(int x, int y) { this.x = x; this.y = y; } @Override public String toString() { return "Parent [x=" + x + ", y=" + y + "]"; } } class Child extends Parent { int z; public Child(int x, int y, int z) { super(x, y); this.z = z; } @Override public String toString() { return super.toString() + "Child [z=" + z + "]"; } } public class Main { public static void main(String[] args) { Child child = new Child(5, 10, 15); System.out.println(child); } }
输出:
Parent [x=5, y=10]Child [z=15]
您可以执行以下操作: