public class Workers {
//员工资料,包括编号,基本工资,2倍加班时间,3倍加班时间,津贴,报销,最终工资,个税额,四金数
public int id;
public float pay;
public int workTime2;
public int workTime3;
public int subsidy;
public int writeOff;
public float finalPay;
public float tax;
public float fourGold;
//有参构造
public Workers(int id, float pay, int worktime2, int worktime3,
int subsidy, int writeoff) {
this.id = id;
this.pay = pay;
this.workTime2 = worktime2;
this.workTime3 = worktime3;
this.subsidy = subsidy;
this.writeOff = writeoff;
}
//无参构造
public float getFinalPay() {
return finalPay;
}
//封装几个值的存取
public void setFinalPay(float finalPay) {
this.finalPay = finalPay;
} public float getFourGold() {
return fourGold;
} public void setFourGold(float fourGold) {
this.fourGold = fourGold;
} public float getTax() {
return tax;
} public void setTax(float tax) {
this.tax = tax;
} public Workers() { }
//工资计算方法
static void FtfPay(int id, float pay, int worktime2, int worktime3,
int subsidy, int writeoff) {
Workers wk = new Workers();
float f = pay + subsidy + writeoff + ((pay / 22) * worktime2)
+ ((pay / 22) * worktime3);
wk.setFourGold((float) ((f * 0.08) + (f * 0.22) + (f * 0.02)
+ (f * 0.12) + (f * 0.01) + (f * 0.02) + (f * 0.07) + (f * 0.07)));
wk.setTax((float) (wk.fourGold - 3000) * 0.15f);
wk.setFinalPay(f-wk.fourGold+wk.tax);

}
}======================================================================
public class PayFormation {
public static void main(String[] args) {
Workers wk1 = new Workers(1, 3000, 56, 0, 620, 123);
Workers wk2 = new Workers(2, 4500, 12, 0, 230, 0);
Workers wk3 = new Workers(3, 6000, 0, 0, 1000, 500);
Workers wk4 = new Workers(4, 3600, 32, 8, 200, 100);
Workers[] wkArr = { wk1, wk2, wk3, wk4 };
System.out.println("员工编号\t\t所得工资\t\t四金缴纳额\t个人所得税额");
for (int i = 0; i < wkArr.length; i++) {
Workers.FtfPay(wkArr[i].id, wkArr[i].pay, wkArr[i].workTime2,
wkArr[i].workTime3, wkArr[i].subsidy, wkArr[i].writeOff);
System.out.print(wkArr[i].id + "\t\t" + wkArr[i].getFinalPay() + "\t\t"
+ wkArr[i].getFourGold() + "\t\t" + wkArr[i].getTax()+"\n");
}
System.out.println();
}
}运行结果是员工编号 所得工资 四金缴纳额 个人所得税额
1 0.0 0.0 0.0
2 0.0 0.0 0.0
3 0.0 0.0 0.0
4 0.0 0.0 0.0请问问题出在哪里?

解决方案 »

  1.   

    看了我老半天,童鞋,你看你的工资计算方法
    //工资计算方法
    static void FtfPay(int id, float pay, int worktime2, int worktime3,int subsidy, int writeoff) {
    Workers wk = new Workers();
    float f = pay + subsidy + writeoff + ((pay / 22) * worktime2)+ ((pay / 22) * worktime3);
    wk.setFourGold((float) ((f * 0.08) + (f * 0.22) + (f * 0.02)+ (f * 0.12) + (f * 0.01) + (f * 0.02) + (f * 0.07) + (f * 0.07)));
    wk.setTax((float) (wk.fourGold - 3000) * 0.15f);
    wk.setFinalPay(f-wk.fourGold+wk.tax);
    }你没有返回赋值之后的对象,你赋值再正确,跟你主函数中输出的对象没有任何关系啊?主函数中:你调用这个方法后,确实是给对象赋上值了,但是你在for (int i = 0; i < wkArr.length; i++) {
    Workers.FtfPay(wkArr[i].id, wkArr[i].pay, wkArr[i].workTime2,wkArr[i].workTime3, wkArr[i].subsidy, wkArr[i].writeOff);System.out.print(wkArr[i].id + "\t\t" + wkArr[i].getFinalPay() + "\t\t"+ wkArr[i].getFourGold() + "\t\t" + wkArr[i].getTax()+"\n");
    }这段代码中也仅仅是循环地把对象输出出来而已!明白不?
      

  2.   


    public class Workers {
        public int id;
        public float pay;
        public int workTime2;
        public int workTime3;
        public int subsidy;
        public int writeOff;
        public float finalPay;
        public float tax;
        public float fourGold;
    //有参构造    public Workers(int id, float pay, int worktime2, int worktime3,
                       int subsidy, int writeoff) {
            this.id = id;
            this.pay = pay;
            this.workTime2 = worktime2;
            this.workTime3 = worktime3;
            this.subsidy = subsidy;
            this.writeOff = writeoff;
        }
    //无参构造    public float getFinalPay() {
            return finalPay;
        }
    //封装几个值的存取    public void setFinalPay(float finalPay) {
            this.finalPay = finalPay;
        }    public float getFourGold() {
            return fourGold;
        }    public void setFourGold(float fourGold) {
            this.fourGold = fourGold;
        }    public float getTax() {
            return tax;
        }    public void setTax(float tax) {
            this.tax = tax;
        }    public Workers() {    }
    //工资计算方法   public void FtfPay() {
            float f = pay + subsidy + writeOff + ((pay / 22) * workTime2)
                    + ((pay / 22) * workTime3);
            this.fourGold = (float) ((f * 0.08) + (f * 0.22) + (f * 0.02)
                    + (f * 0.12) + (f * 0.01) + (f * 0.02) + (f * 0.07) + (f * 0.07));
            this.tax = (float) (this.fourGold - 3000) * 0.15f;
            this.finalPay = f - this.fourGold + this.tax;    }
    }class PayFormation {
        public static void main(String[] args) {
            Workers wk1 = new Workers(1, 3000, 56, 0, 620, 123);
            Workers wk2 = new Workers(2, 4500, 12, 0, 230, 0);
            Workers wk3 = new Workers(3, 6000, 0, 0, 1000, 500);
            Workers wk4 = new Workers(4, 3600, 32, 8, 200, 100);
            Workers[] wkArr = {wk1, wk2, wk3, wk4};
            System.out.println("员工编号\t\t所得工资\t\t四金缴纳额\t个人所得税额");
            for (int i = 0; i < wkArr.length; i++) {
                wkArr[i].FtfPay();
                System.out.print(wkArr[i].id + "\t\t" + wkArr[i].getFinalPay() + "\t\t"
                        + wkArr[i].getFourGold() + "\t\t" + wkArr[i].getTax() + "\n");
            }
            System.out.println();
        }
    }
      

  3.   


    也就是说,尽管我方法里调用了相应的set()方法,只要返回值类型是void,我需要赋值的变量依然没有变化?我进度刚到面向对象,非常懵……
    另外代码格式有什么不妥的地方么?高手们的代码都是怎么写的呢。
      

  4.   

    4楼大哥的我也看懂了………之前方法里只是new了一个对象然后对该新对象内的相应变量进行操作,而另一个类中对该类的新的引用里的数据却没变化
      

  5.   

    属性最好是私有地,然后用getter和setter封装,代码最好用插入源码的方式贴(#号那个菜单)