2

3 人の従業員の name と computePay を小数点以下 2 桁で出力する toString() メソッドを作成するにはどうすればよいでしょうか? StringBuilder を追加する前に、プログラムは機能していました (名前とweeksPay をコマンド ラインに出力)。どんな助けでも大歓迎です。

import javax.swing.JOptionPane;

public class TestPayroll {

        public static void main(String[] args) {

                Payroll employee1 = new Payroll("Tiny Tim", 100.25, 40);
                Payroll employee2 = new Payroll("Brad Pitt", 150.50, 10);
                Payroll employee3 = new Payroll("Madonna", 124.24, 20);

        StringBuilder sb = new StringBuilder();

        String toDisplay=sb.toString();        
        sb.append(String.format("\n", employee1.getName(), employee1.getComputePay()));
        sb.append(String.format("\n", employee2.getName(), employee2.getComputePay()));


        JOptionPane.showMessageDialog(null, sb.toString(), toDisplay, JOptionPane.INFORMATION_MESSAGE);
        }                       
}

public class Payroll {

    public static void main(String[] args) {
                }

                private String name;
                private double payRate;
                private double hrsWorked;
                private double computePay;

                //default constructor
                public Payroll() {
                        this.name = name;
                        this.payRate = payRate;
                        this.hrsWorked = hrsWorked;
                        this.computePay = computePay;
                }

                //Payroll constructor
                public Payroll(String name, double payRate, double hrsWorked) {
                        this.name = name;
                        this.payRate = payRate;
                        this.hrsWorked = hrsWorked;
                }

                //return name
                public String getName() {
                        return name;
                }

                //set name
                public void setName(String name) {
                        this.name = name;
                }

                //return pay rate
                public double getPayRate() {
                        return payRate;
                }

                //set pay rate
                public void setPayRate(double payRate) {
                        this.payRate = payRate;
                }

                //return hours worked for the week
                public double getHrsWorked() {
                        return hrsWorked;
                }

                //set hours worked for the week
                public void setHrsWorked(double hrsWorked) {
                        this.hrsWorked = hrsWorked;
                }

                //find week's pay
                public double getComputePay() {
                        double computePay = payRate * hrsWorked;
            return computePay;
                }      

}
4

4 に答える 4

1

Apache ToStringBuilderクラスを使用できます。ドキュメントの例を次に示します。

 public class Person {
   String name;
   int age;
   boolean smoker;

   ...

   public String toString() {
     return new ToStringBuilder(this).
       append("name", name).
       append("age", age).
       append("smoker", smoker).
       toString();
   }
 }
于 2013-07-14T09:12:53.413 に答える
1

10 進数をフォーマットするには、 java.text.DecimalFormatを使用し、クラス レベルでクラス メンバーとして定義して、@Multithreader がコメントで言及したように、すべてのオブジェクトの動作を共有できるようにします。これがメソッドになります。PayrolltoString()

 private static DecimalFormat df = new DecimalFormat("#.##");
 //......
    @Override
    public String toString(){
      return "Name: "+getName()+
             "\nCompute Pay: "+df.format(getComputePay())+"\n";
    }

次のようにメソッドを呼び出します。

System.out.println(employee1.toString());

多くのコードを削減できるので、私はjava.util.Listを使用することを好みます。

public static void main(String[] args) {
    List <Payroll> employes = new ArrayList<>();

    employes.add( new Payroll("Tiny Tim", 100.2534, 40.87876));
    employes.add( new Payroll("Brad Pitt", 150.50, 10));
    employes.add( new Payroll("Madonna", 124.24, 20));

    for(Payroll p :employes){
    System.out.println(p.toString()+"\n");
    }
}
于 2013-07-14T08:48:12.463 に答える
0

これは役に立ちます

    @Override
    public String toString(){
        Formatter fmt = new Formatter();
        fmt.format("%.2f", computePay);
        return "Name : "+name+"\n"+"ComputePay : "+fmt.toString();
    }

もちろん、インポートする必要がありますjava.util.Formatter

于 2013-07-14T08:49:21.980 に答える
0

次のコードはコンパイル時エラーを与えるはずだと思います:

//default constructor
                public Payroll() {
                        this.name = name;
                        this.payRate = payRate;
                        this.hrsWorked = hrsWorked;
                        this.computePay = computePay;
                }

そして、このコードはあなたに問題を引き起こしています:

sb.append(String.format("\n", employee1.getName(), employee1.getComputePay()));
sb.append(String.format("\n", employee2.getName(), employee2.getComputePay()));

前のコードではなく、次のコードが必要です。

sb.append(String.format("%s,%f\n",employee1.getName(), employee1.getComputePay()));
sb.append(String.format("%s,%f\n",employee2.getName(), employee2.getComputePay()));

給与クラスは次のようになります。

public class Payroll {

    private String name;
    private double payRate;
    private double hrsWorked;
    private double computePay;//need not to be instance variable

    //default constructor
    public Payroll() {
        //should set default value if you want
    }

    //Payroll constructor
    public Payroll(String name, double payRate, double hrsWorked) {
        this.name = name;
        this.payRate = payRate;
        this.hrsWorked = hrsWorked;
    }

    //return name
    public String getName() {
        return name;
    }

    //set name
    public void setName(String name) {
        this.name = name;
    }

    //return pay rate
    public double getPayRate() {
        return payRate;
    }

    //set pay rate
    public void setPayRate(double payRate) {
        this.payRate = payRate;
    }

    //return hours worked for the week
    public double getHrsWorked() {
        return hrsWorked;
    }

    //set hours worked for the week
    public void setHrsWorked(double hrsWorked) {
        this.hrsWorked = hrsWorked;
    }

    //find week's pay
    public double getComputePay() {
        double computePay = payRate * hrsWorked;
        return computePay;
    }      


}
import javax.swing.JOptionPane;

public class TestPayroll {

        public static void main(String[] args) {

                Payroll employee1 = new Payroll("Tiny Tim", 100.25, 40);
                Payroll employee2 = new Payroll("Brad Pitt", 150.50, 10);
                Payroll employee3 = new Payroll("Madonna", 124.24, 20);

        StringBuilder sb = new StringBuilder();

        String toDisplay=sb.toString();   
        sb.append(String.format("%s,%f\n",employee1.getName(), employee1.getComputePay()));
        sb.append(String.format("%s,%f\n",employee2.getName(), employee2.getComputePay()));
       // sb.append(String.format("\n", employee1.getName(), employee1.getComputePay()));
        //sb.append(String.format("\n", employee2.getName(), employee2.getComputePay()));


        JOptionPane.showMessageDialog(null, sb.toString(), toDisplay, JOptionPane.INFORMATION_MESSAGE);
        }                       
}
于 2013-07-14T08:49:27.917 に答える