Java 使用构造函数创建对象
我正在做一个项目,被卡住了,已经有一段时间了,我想做两个对象,一个是t2001,另一个是t2009。我为它们创建了一个构造函数,但是我仍然得到一个红色下划线错误,上面写着找不到符号?有人知道我做错了什么吗Java 使用构造函数创建对象,java,tax,Java,Tax,我正在做一个项目,被卡住了,已经有一段时间了,我想做两个对象,一个是t2001,另一个是t2009。我为它们创建了一个构造函数,但是我仍然得到一个红色下划线错误,上面写着找不到符号?有人知道我做错了什么吗 package ProgrammingAssignment; import java.util.Scanner; /** * * @author Joe */ public class Tax { public static final int SINGLE_FILER =
package ProgrammingAssignment;
import java.util.Scanner;
/**
*
* @author Joe
*/
public class Tax {
public static final int SINGLE_FILER = 0;
public static final int MARRIED_JOINTLY_OR_QUALIFYING_WIDOW = 1;
public static final int MARRIED_SEPARATELY = 2;
public static final int HEAD_OF_HOUSEHOLD = 3;
private int filingStatus;
private int[][] brackets;
private double[] rates;
private double taxableIncome;
public Tax(int filingStatus, int[][] brackets, double[] rates, double taxableIncome) {
this.filingStatus = filingStatus;
this.brackets = brackets;
this.rates = rates;
this.taxableIncome = taxableIncome;
}
public double getTax() {
double tax;
if (taxableIncome <= brackets[filingStatus][0]) {
return Math.round(taxableIncome * rates[0]);
}
tax = brackets[filingStatus][0] * rates[0];
for (int i = 1; i < brackets[filingStatus].length; i++) {
if (taxableIncome > brackets[filingStatus][i]) {
tax += (brackets[filingStatus][i] - brackets[filingStatus][i - 1]) * rates[i];
} else {
return Math.round(tax + (taxableIncome - brackets[filingStatus][i - 1]) * rates[i]);
}
}
return Math.round(tax + (taxableIncome - brackets[filingStatus][4]) * rates[5]);
}
public void TaxFiling(int taxYear, int[][] brackets, double[] rates) {
int Year = taxYear;
int[][] bracket = brackets;
double[] rate = rates;
}
public static void main(String[] args) {
int taxYear;
int sIncome;
int eIncome;
int stepVal;
Scanner input = new Scanner(System.in);
System.out.println("Enter a tax year: ");
taxYear = input.nextInt();
if (taxYear != 2009 && taxYear != 2001) {
System.out.println("Please Enter a Valid Year!");
System.exit(1);
}
System.out.println("Enter the starting income value: ");
sIncome = input.nextInt();
System.out.println("Enter ending income value: ");
eIncome = input.nextInt();
if (eIncome < sIncome) {
System.out.println("Ending Income Cannot Be Less Then Starting");
System.exit(2);
}
System.out.println("Enter a step value: ");
stepVal = input.nextInt();
if (stepVal < 0) {
System.out.println("Please Enter a Positive Step Value!");
System.exit(3);
}
System.out.println(taxYear + " Tax Table");
System.out.println("Income range: " + sIncome + " to " + eIncome);
int[][] brackets2009 = new int[][]{
// stat 0 single
{8350, 33950, 82250, 171550, 372950},
// stat 1 Married Filing Jointly
{16700, 67900, 137050, 208850, 372950},
// stat 2 Married Filing Separately
{8350, 33950, 68525, 104425, 186475},
// stat 3 Head of Household
{11950, 45500, 117450, 190200, 372950}};
int[][] brackets2001 = new int[][]{
// stat 0 single
{27050, 65550, 136750, 297350},
// stat 1 married joint
{45200, 109250, 166500, 297350},
// stat 2 married separate
{22600, 54625, 83250, 148675},
// stat 3 head of household
{36250, 93650, 15150, 297350}
};
double[] rates2009 = new double[]{0.10, 0.15, 0.25, 0.28, 0.33, 0.35};
double[] rates2001 = new double[]{.15, .275, .305, .355, .391};
TaxFiling t2001 = new TaxFiling(2001, brackets2001, rates2001);
TaxFiling t2009 = new TaxFiling(2009, brackets2009, rates2009);
if (taxYear == 2001) {
DisplayTaxTable(t2001, sIncome, eIncome, stepVal);
} else if (taxYear == 2009) {
DisplayTaxTable(t2009, sIncome, eIncome, stepVal);
}
}
public static void displayTaxTable(Tax tObj, int incomeStart, int incomeEnd, int incomeStep) {
String s1 = "Taxable Income";
String s2 = "Single";
String s3 = "Married Joint";
String s4 = "Married Separate";
String s5 = "Head of house";
System.out.printf(
"%-20s%-12s%-4s%21s%16s\n", s1, s2, s3, s4, s5);
for (int i = 50000;
i <= 60000; i += 1000) {
System.out.printf("%4d%19.0f%16.0f%16.0f%20.0f\n", i,
new Tax(Tax.SINGLE_FILER, brackets2009, rates2009, i).getTax(),
new Tax(Tax.MARRIED_JOINTLY_OR_QUALIFYING_WIDOW, brackets2009, rates2009, i).getTax(),
new Tax(Tax.MARRIED_SEPARATELY, brackets2009, rates2009, i).getTax(),
new Tax(Tax.HEAD_OF_HOUSEHOLD, brackets2009, rates2009, i).getTax()
);
}
for (int i = 50000;
i <= 60000; i += 1000) {
System.out.printf("%4d%19.0f%16.0f%16.0f%20.0f\n", i,
new Tax(Tax.SINGLE_FILER, brackets2001, rates2001, i).getTax(),
new Tax(Tax.MARRIED_JOINTLY_OR_QUALIFYING_WIDOW, brackets2001, rates2001, i).getTax(),
new Tax(Tax.MARRIED_SEPARATELY, brackets2001, rates2001, i).getTax(),
new Tax(Tax.HEAD_OF_HOUSEHOLD, brackets2009, rates2001, i).getTax()
);
}
}
}
包编程任务;
导入java.util.Scanner;
/**
*
*@作者乔
*/
公共类税{
公共静态final int SINGLE_FILER=0;
公共静态最终int联名结婚或符合资格的寡妇=1;
公共静态最终int_分别=2;
住户户主的公共静态最终int=3;
私人文件状态;
专用int[][]括号;
私人双[]费率;
私人双重可征税收入;
公共税(国际申报状态、国际[]括号、双[]税率、双应纳税收入){
this.filingStatus=文件状态;
这个括号=括号;
这个。比率=比率;
此项。应纳税所得额=应纳税所得额;
}
公共双getTax(){
双重征税;
if(应纳税收入方括号[申报状态][i]){
税+=(括号[备案状态][i]-括号[备案状态][i-1])*税率[i];
}否则{
报税数学四舍五入(税+(应纳税所得额-括号[申报状态][i-1])*税率[i]);
}
}
报税数学四舍五入(税+(可征税收入-括号[申报状态][4])*税率[5]);
}
公共无效纳税申报(国际纳税年度,国际[]括号,双[]费率){
int Year=纳税年度;
int[][]括号=括号;
双[]费率=费率;
}
公共静态void main(字符串[]args){
国际纳税年度;
因特辛康;
int eIncome;
int-stepVal;
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入纳税年度:”);
taxYear=input.nextInt();
如果(税年=2009和税年=2001){
System.out.println(“请输入有效年份!”);
系统出口(1);
}
System.out.println(“输入起始收入值:”);
sIncome=input.nextInt();
System.out.println(“输入期末收入值:”);
eIncome=input.nextInt();
if(eIncome i您正试图在您的Tax
类中声明TaxFiling
的构造函数。TaxFiling
需要它自己的单独类文件,或者需要在您的Tax
类中的私有类中声明。TaxFiling
不是构造函数,它是Tax
类中的一个方法,您需要为Taxfiling
创建一个不同的类,并创建一个构造函数,如:
public class TaxFiling {
public TaxFiling(int taxYear, int[][] brackets, double[] rates) {
}
}
如果你写“newtaxfiling(…)”,这意味着你调用了一个构造函数。但在你的代码中,TaxFiling是一个方法
三种选择:
1) 创建一个包含字段taxYear、括号和双费率的类TaxFiling
。创建一个构造函数:
public TaxFiling(int taxYear, int[][] brackets, double[] rates) {
//set taxYear, brackets, rates etc
}
2) Make method taxFiling(方法以小写字母开头!)返回一个税对象,如下所示:
public Tax taxFiling(int taxYear, int[][] brackets, double[] rates) {
return new Tax(/* set your data here */);
}
3) 在Tax类中设置一个构造函数。但是,所有构造函数的名称必须与其所在的类完全相同,如下所示:
public Tax(int taxYear, int[][] brackets, double[] rates) {
//set taxYear, brackets, rates etc
}
注意,在displaytastable
方法中,不能使用传递的tObj。利用它!使用getter从该对象获取信息
public Tax(int taxYear, int[][] brackets, double[] rates) {
int Year = taxYear;
int[][] bracket = brackets;
double[] rate = rates;
}
这就是我将其更改为的内容,它可以工作,但当我尝试将对象传递到displayTaxTable时,会出现更多错误
public static void displayTaxTable(Tax tObj, int incomeStart, int incomeEnd, int stepVal) {
String s1 = "Taxable Income";
String s2 = "Single";
String s3 = "Married Joint";
String s4 = "Married Separate";
String s5 = "Head of house";
System.out.printf(
"%-20s%-12s%-4s%21s%16s\n", s1, s2, s3, s4, s5);
for (int i = incomeStart;
i <= incomeEnd; i += stepVal) {
System.out.printf("%4d%19.0f%16.0f%16.0f%20.0f\n", i,
new Tax(Tax.SINGLE_FILER, bracket, rate, i).getTax(),
new Tax(Tax.MARRIED_JOINTLY_OR_QUALIFYING_WIDOW, bracket, rate, i).getTax(),
new Tax(Tax.MARRIED_SEPARATELY, bracket, rate, i).getTax(),
new Tax(Tax.HEAD_OF_HOUSEHOLD, bracket, rate, i).getTax()
);
}
}
public static void display taxtable(税tObj、int incomeStart、int incomeEnd、int stepVal){
字符串s1=“应纳税所得额”;
字符串s2=“Single”;
字符串s3=“已婚关节”;
String s4=“已婚或分居”;
字符串s5=“议长”;
System.out.printf(
“%-20s%-12s