5

我创建了一个类文件和一个测试器文件。当我尝试使用构造函数创建对象时,它不会编译。

它说“PassTheClassTester.java:5:错误:PassTheClass 类中的构造函数 PassTheClass 不能应用于给定类型;”

请帮忙。这是我的代码:

    public class PassTheClass
{  
    private String myName = " ";
    private int myGrade;
    private String myEmotion = " ";


    public PassTheClass (String xMyName, String xMyEmotion)
    {myName = xMyName;
    myGrade = 0;
    myEmotion = xMyEmotion;}


    public String getMyName()
    {return myName;}

    public int getMyGrade()
    {return myGrade;}

    public String getMyEmotion()
    {return myEmotion;}


    public void setMyName (String yMyName)
    {myName = yMyName;}

    public void setMyGrade (int yMyGrade)
    {myGrade = yMyGrade;}

    public void setMyEmotion (String yMyEmotion)
    {myEmotion = yMyEmotion;}

}



    public class PassTheClassTester
{  
   public static void main(String[] args)
   {  
      PassTheClass demo = new PassTheClass("Squidward",94,"proud");

        System.out.println(student.getMyName());

   }
}
4

3 回答 3

9

您的构造函数接受String, String,但您正在传递String, int, String

将参数添加int到构造函数,或int从调用中删除。

我的建议是添加一个 int 参数,即将构造函数更改为:

public PassTheClass (String xMyName, int xMyGrade, String xMyEmotion) {
    myName = xMyName;
    myGrade = xMyGrade;
    myEmotion = xMyEmotion;
}

如果您仍然需要String, String构造函数,请将其更改为调用 3-arg 构造函数并传入您当前编码的初始值:

 public PassTheClass (String xMyName, String xMyEmotion) {
     this(xMyName, 0, xMyEmotion);
 }

尽管在参数前加上“x”以将它们与字段名称区分开来并没有什么“错误”,但我从未见过这样的事情。java中的约定是参数名与字段名同名,this.赋值时使用,像这样

public PassTheClass (String myName, int myGrade, String myEmotion) {
    this.myName = myName;
    this.myGrade = myGrade;
    this.myEmotion = myEmotion;
}

作为进一步的“风格”改进,不要在字段名称前加上“my”。每个领域都是隐含的“我”的东西;只需简单地命名它们,namegradeemotion


好的代码都是为了清晰:最好避免使用前缀,因为它们只会使代码混乱并降低可读性。

于 2013-03-10T20:23:14.217 回答
0

public PassTheClass (String xMyName, String xMyEmotion)您的构造函数需要 2 个参数,您在此处传递 3 个参数:

PassTheClass demo = new PassTheClass("Squidward",94,"proud");

编译器说“bleh?”

您可能需要另一个如下所示的构造函数:

public PassTheClass (String xMyName, int grade, String xMyEmotion)
    {myName = xMyName;
    myGrade = grade;
    myEmotion = xMyEmotion;}
于 2013-03-10T20:27:16.943 回答
0

你正在调用一个带有三个参数的构造函数,但你没有像那样声明一个。要使代码正常工作,您可以添加如下构造函数:

public PassTheClass (String myName, int myGrade, String myEmotion)
{
    this.myName = myName;
    this.myGrade = myGrade;
    this.myEmotion = myEmotion;
}

或者:

public PassTheClass(String myName, int myGrade, String myEmotion) {
    this(myName, myEmotion);
    this.myGrade = myGrade;
}

或者对于第三种选择,保留上面的第一个构造函数并将您拥有的 2 参数构造函数替换为:

public PassTheClass(String myName, String myEmotion) {
    this(myName, 0, myEmotion);
}

第三种方法允许您拥有一个初始化所有内容的核心构造函数,以及各种接受某些事物的默认值并将所有内容传递给核心构造函数的便利构造函数。这最大限度地减少了复制和粘贴的数量,因为作业只发生在一个地方。

this将实例变量与构造函数参数区分开来,因此您无需诉诸名称的变化。Usingthis是绝大多数 Java 代码使用的标准约定,遵循约定使您的代码更具可读性。

于 2013-03-10T20:26:05.773 回答