0

TestPayroll 类中的这 3 个语句出现“表达式的非法开始”错误。提前致谢。

private String [] name = {"Tiny Tim", "Brad Pitt", "Madonna"};

private double [] payRate = {100.25, 150.50, 124.25};

private double [] hrsWorked = {40, 35, 36};

TestPayroll.java 下面:

/**
This program contains a Payroll class that has private data members for an employee's full name, hourly rate pay, number of hours worked, and total pay for the week. There is an array of 3 Payroll objects, which is instantiated manually with the number of hours each employee worked.  The program displays the amount of gross pay each employee has earned.  
*/

import javax.swing.JOptionPane;

public class TestPayroll {

public static void main(String[] args) {

    private String [] name = {"Tiny Tim", "Brad Pitt", "Madonna"};
    private double [] payRate = {100.25, 150.50, 124.25};
    private double [] hrsWorked = {40, 35, 36};

    //Payroll object
    Payroll calcPay = new Payroll(name, weeksPay);

    //Display weekly pay
    JOptionPane.showMessageDialog(null, "This week's pay for " + name[0].getName + " is " + payroll.getWeeksPay() +"\n" + "This week's pay for " + name[1].getName + " is " + payroll.getWeeksPay() + "\n" + "This week's pay for " + name[2].getName + " is " + payroll.getWeeksPay());

}   

}

public class Payroll {

public static void main(String[] args) {

    private String name;
    private double payRate;
    private double hrsWorked;
    private double weeksPay;

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

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

    //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 getWeeksPay(double weeksPay) {
        double weeksPay = payRate * hrsWorked;
        return weeksPay;
    }   

}
}
4

6 回答 6

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

是一种方法,而不是类定义。结果,它不能保存成员,这意味着向编译器添加成员范围privateString name无意义的。

现在,如果你有以下

public class Something {

  private String name;

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

}

这将是一个不同的故事。现在String name是类定义的一部分,而不是静态方法。既然是类的成员,就可以有一个类的暴露范围

于 2013-07-12T14:04:41.393 回答
2

这些属于类而不是方法:

    private String [] name = {"Tiny Tim", "Brad Pitt", "Madonna"};
    private double [] payRate = {100.25, 150.50, 124.25};
    private double [] hrsWorked = {40, 35, 36};

或者您可以删除 private 关键字,在这种情况下它们将是您main方法中的局部变量。

你的Payroll类在方法中有它的代码main。这不会编译。从main方法中删除您的代码并将其放入类中。

于 2013-07-12T14:00:28.503 回答
1
private String [] name = {"Tiny Tim", "Brad Pitt", "Madonna"};
private double [] payRate = {100.25, 150.50, 124.25};
private double [] hrsWorked = {40, 35, 36};

应该是,只是:

String [] name = {"Tiny Tim", "Brad Pitt", "Madonna"};
double [] payRate = {100.25, 150.50, 124.25};
double [] hrsWorked = {40, 35, 36};

删除private以使它们成为局部变量;

(或者)

如果您想作为实例变量,请将它们直接移动到类中。

于 2013-07-12T14:00:15.327 回答
0

删除private这 3 行中的每一行上的修饰符。或者,如果您打算将它们作为实例变量,请将它们移出main方法。这取决于你的意图。

于 2013-07-12T14:00:31.630 回答
0

删除修饰符private

String [] name = {"Tiny Tim", "Brad Pitt", "Madonna"};
double [] payRate = {100.25, 150.50, 124.25};
double [] hrsWorked = {40, 35, 36};

它是局部变量的非法修饰符。局部变量在其声明之前只能有final关键字。有关更多信息,请参阅JLS 14.4

于 2013-07-12T14:04:55.293 回答
0

在方法中使用private修饰符是不合法的。

,和修饰符用于控制类之间的变量访问,而不是方法之间的访问private。在方法中声明的变量,只能在方法本身的范围内访问。publicprotected

您可以通过阅读Oracle 官方 Java 教程中的控制对类成员的访问来加深对变量修饰符的了解。

于 2013-07-12T14:05:59.683 回答