Java 为什么我的类给我一个错误的回报?

Java 为什么我的类给我一个错误的回报?,java,class,Java,Class,现在我将它设置为构造函数,但是我不确定如何实际使用它。我希望能够存储名字、姓氏和学位级别。我需要它继续运行,直到我停止它并继续更多的程序 import javax.swing.*; import java.util.ArrayList; public class Tutor { public Tutor(String firstName, String firstName, String degreeLevel) { firstName = firstName; la

现在我将它设置为构造函数,但是我不确定如何实际使用它。我希望能够存储名字、姓氏和学位级别。我需要它继续运行,直到我停止它并继续更多的程序

import javax.swing.*;
import java.util.ArrayList; 

public class Tutor
{
public Tutor(String firstName, String firstName, String degreeLevel)
    {
    firstName = firstName;
    lastName = firstName;
    degreeLevel = degreeLevel;  
    }   
public static void main (String[] args)
    {
    String fName;
    String lName;
    String level;
    String ans;
    ArrayList<String> listOfTutor = new ArrayList<String>();
    for (int i = 0; i<listOfTutor.size(); i++)
        {
        fName = JOptionPane.showInputDialog(null,"Enter Tutor's First Name: ");
        lName = JOptionPane.showInputDialog(null,"Enter Tutor's Last Name: ");
        level = JOptionPane.showInputDialog(null,"Enter Tutor's Highest Level of Degree: ");
        Tutor t = new Tutor(fName,lName,level);
        listOfTutor.add(t);
        }
    }   
}
import javax.swing.*;
导入java.util.ArrayList;
公开课导师
{
公共导师(stringfirstname、stringfirstname、stringdegreelevel)
{
名字=名字;
lastName=firstName;
degreeLevel=degreeLevel;
}   
公共静态void main(字符串[]args)
{
字符串fName;
字符串名称;
字符串级;
字符串ans;
ArrayList listOfTutor=新的ArrayList();

对于(inti=0;i将返回类型添加到方法。正如您发布的一样,您返回的是字符串,而没有给出方法的返回类型。因此,将字符串添加为方法的返回类型

如果试图从声明为void的方法返回值,则会出现编译器错误

public String Tutor(String firstName, String lastName, String degreeLevel) {
  .....
   return(lastName +", "+ firstName +" "+ degreeLevel);
}

您将
Tutor
视为一种方法。如果
Tutor
确实是一种方法,则没有与之关联的返回类型

另外,
firstName
lastName
degreeLevel
在课堂上的声明在哪里?在我看来,可能还有其他问题——请记住

public Tutor(String firstName, String lastName, String degreeLevel)
应该是

public String Tutor(String firstName, String lastName, String degreeLevel)

您需要获取错误,因为
Tutor()
函数正在返回一个值,但在方法声明中没有给出返回类型

如果希望函数返回字符串:

public String Tutor(String firstName, String lastName, String degreeLevel)
       ^^^^^^
实际上,目前代码中存在很多问题。我相信您要做的是将Tutor()设置为构造函数。如果是这样的话,它的声明应该是:

public CalculateATutor(String firstName, String lastName, String degreeLevel)
因为CalculateAutor是类的名称。它不应返回任何内容。此外,以下几行:

this.firstName = firstName;
this.lastName = lastName;
this.degreeLevel = degreeLevel; 
将无法按您希望的方式工作。如果您试图设置类字段,则需要先声明类中的字段。如下所示:

public class CalculateATutor
{
    String firstName;
    String lastName;
    String degreeLevel; 
    ...
}   

你的代码真是乱七八糟。 您有一个名为
CalculateATutor
的类,其中有一个看起来像构造函数但名为
Tutor
的类,您在
main
函数中使用它作为常规类

首先,你需要了解你想做什么(也许还需要了解和)

但对于你的问题:

如果希望有一个名为Tutor的方法,则需要在方法签名中添加返回类型

public String Tutor(String firstName, String lastName, String degreeLevel)
    {
    this.firstName = firstName;
    this.lastName = lastName;
    this.degreeLevel = degreeLevel; 
    return(lastName +", "+ firstName +" "+ degreeLevel);
    } 
如果试图创建构造函数,则需要使用类名并删除return语句:

public CalculateATutor(String firstName, String lastName, String degreeLevel)
    {
    this.firstName = firstName;
    this.lastName = lastName;
    this.degreeLevel = degreeLevel; 
    } 
当您返回字符串时

return(lastName +", "+ firstName +" "+ degreeLevel);  
相反,我们的答案试图理解编译器的错误消息:

 error: invalid method declaration; return type required
                      ^ function declaration is wrong     
还表示需要返回类型
,因此您忘记了函数的返回类型


其中函数名为
public Tutor()

时,错误消息会告诉您该怎么做。所有Java方法/函数都必须用返回类型声明

在本例中,它似乎是一个字符串,因此它变为

public String Tutor()
如果你不想让它归还任何东西,那么它就是

public void getMiau()

您的导师方法正在返回字符串,但您尚未将其声明为具有返回类型。请尝试:

public String Tutor(String firstName, String lastName, String degreeLevel)

尚不清楚
Tutor
应该是方法还是构造函数。如果它应该是构造函数,则在名为
CalculateATutor
的类中声明它,该类不起作用。您也没有将构造函数作为构造函数编写(它不应该有
return
语句)。您可以通过以下几种方式解决此问题:

  • 将类名更改为
    Tutor
  • 将构造函数名称更改为
    CalculateATutor
  • Tutor
    构造函数移动到名为
    Tutor
    的内部类
    CalculateATutor
  • 1) 您正在使用this.keywork来引用尚未定义的类变量 2) 您似乎调用了类CalculateAutor,但类导师的构造函数应该是相同的,因此类似于以下内容:

    导入javax.swing.*

    public class Tutor //NOTE CORRECTED CLASS NAME
    {
    String firstName;
    String lastName;
    String degreeLevel
    public Tutor(String firstName, String lastName, String degreeLevel)
        {
        this.firstName = firstName;
        this.lastName = lastName;
        this.degreeLevel = degreeLevel; 
    
        }   
    public static void main (String[] args)
        {
        String ans;
        List<Tutor> Tutor = new ArrayList<>();
        for (int i = 0; i<Tutor.size; i++) //Tutor.size==0, will never run, I can't correct as I have no idea what you want to happen
            {
            ans = JOptionPane.showInputDialog(null,"Enter Tutor's Last Name, First Name, and Highest Level of Degree:");
            Tutor = ans; //I have no idea whats going on here but Tutor should be initialised like new Tutor(string,string,string)
    
            }
        }   
    }
    
    public class Tutor//注意更正的类名
    {
    字符串名;
    字符串lastName;
    串级
    公共导师(字符串名、字符串名、字符串级别)
    {
    this.firstName=firstName;
    this.lastName=lastName;
    this.degreeLevel=degreeLevel;
    }   
    公共静态void main(字符串[]args)
    {
    字符串ans;
    List Tutor=new ArrayList();
    
    对于(int i=0;i您在那里犯了很多错误:

    第一:如果导师是一种方法:

    必须为方法设置返回类型。
    publicstaticstringtutor(…)
    这样,您的方法将正确返回值

    第二:如果导师应该是你的班级:

    然后,您必须将类重命名为Tutor,或将构造函数重命名为CalculateATutor。 构造函数从来没有返回类型,也从来没有包含返回语句。因此,通过这种方式,您必须删除构造函数中的返回语句

    public CalculateATutor(String firstName, String lastName, String degreeLevel)
    {
        this.firstName = firstName;
        this.lastName = lastName;
        this.degreeLevel = degreeLevel; 
    } 
    
    第三:

    你的班主任(如果是班级)的用法是错误的


    通过这种方式可以存储变量。

    您需要指定一个Returntype,在您的示例中,它应该是String。
    publicstaticstringtutor(…)
    重命名您的类以匹配构造函数,并删除
    return
    语句。您应该先学习Java编程的基本概念…它不应该是
    公共静态字符串Tutor
    (因为主函数在同一个类中,并且在该类中调用了方法)@Loki是的,我实际上不太确定这里现在应该发生什么。看起来导师可能应该是一个构造函数。HmmBut然后还删除了“构造函数”中的返回语句@Loki-说得好!我更新了我的措辞来解释这一点。我得到了这个错误,我不确定这意味着什么:Tutor.java:28:error:add(Tutor)listoftor.add(t)找不到合适的方法;你的代码非常正确。唯一缺少的是
    public class Tutor //NOTE CORRECTED CLASS NAME
    {
    String firstName;
    String lastName;
    String degreeLevel
    public Tutor(String firstName, String lastName, String degreeLevel)
        {
        this.firstName = firstName;
        this.lastName = lastName;
        this.degreeLevel = degreeLevel; 
    
        }   
    public static void main (String[] args)
        {
        String ans;
        List<Tutor> Tutor = new ArrayList<>();
        for (int i = 0; i<Tutor.size; i++) //Tutor.size==0, will never run, I can't correct as I have no idea what you want to happen
            {
            ans = JOptionPane.showInputDialog(null,"Enter Tutor's Last Name, First Name, and Highest Level of Degree:");
            Tutor = ans; //I have no idea whats going on here but Tutor should be initialised like new Tutor(string,string,string)
    
            }
        }   
    }
    
    public CalculateATutor(String firstName, String lastName, String degreeLevel)
    {
        this.firstName = firstName;
        this.lastName = lastName;
        this.degreeLevel = degreeLevel; 
    } 
    
    String ans;
    List<Tutor> myTutor = new ArrayList<Tutor>(); //You have to specify Tutor in your Template-Class
    for (int i = 0; i<myTutor.size; i++)
        {
        ans = JOptionPane.showInputDialog(null,"Enter Tutor's Last Name, First Name, and Highest Level of Degree:");
        //Here you have a lot to do because you get one inputstring with all 3 Elements
        //You have to split the input or get 3 seperate inputs
        // We assume you have your correct input here right now with Strings fname, lname, level
        Tutor t = new Tutor(lname,fname,level);
        myTutor.add(t);
        }
    }   
    
    public class TestClass{
        String lastName;
    
        public TestClass(String lastName){// this is the Constructor
            this.lastName = lastName;
        }
    
    }