“实际或正式的参数列表长度不同”

时间:2013-07-19 15:04:15

标签: java arrays arguments

当我尝试在Friends f = new Friends(friendsName, friendsAge);的()方括号中添加某些内容时,会出现错误:

  

类中的构造函数朋友不能通过应用于给定类型。   必需:没有参数。找到:String,int。原因:实际或正式   参数列表的长度不同。

但是当我取出参数时,我的朋友列表只显示“null 0”。即使我有String friendsName = input.next();

,值是否设置

此外,当我尝试删除朋友时,它不会执行任何操作。在源代码中,它确实会显示警告,

  

对util.java.Collection.remove的可疑调用:给定对象不能   包含给定的String实例(期望的朋友)。

我对这一切意味着什么感到困惑?

import java.util.ArrayList;
import java.util.Scanner;

public class Friends
{
    public static void main( String[] args )
    {
        int menu;       
        int choice;
        choice = 0;      

        Scanner input = new Scanner(System.in);
        ArrayList< Friends > friendsList = new ArrayList<  >();       

        System.out.println(" 1. Add a Friend ");
        System.out.println(" 2. Remove a Friend ");
        System.out.println(" 3. Display All Friends ");
        System.out.println(" 4. Exit ");
        menu = input.nextInt();

        while(menu != 4)
        {    

            switch(menu)
            {                     

            case 1:

                while(choice != 2)
                {
                    System.out.println("Enter Friend's Name: ");
                    String friendsName = input.next();
                    System.out.println("Enter Friend's Age: ");
                    int friendsAge = input.nextInt();                               
                    Friends f = new Friends(friendsName, friendsAge);
                    friendsList.add(f);
                    System.out.println("Enter another? 1: Yes, 2: No");
                    choice = input.nextInt();
                } break;

            case 2:

                System.out.println("Enter Friend's Name to Remove: ");
                friendsList.remove(input.next());                   
                break;   

            case 3:

                for(int i = 0; i < friendsList.size(); i++)
                {
                    System.out.println(friendsList.get(i).name + " " + friendsList.get(i).age);                        
                } break;                
        }

        System.out.println(" 1. Add a Friend ");
        System.out.println(" 2. Remove a Friend ");
        System.out.println(" 3. Display All Friends ");
        System.out.println(" 4. Exit ");
        menu = input.nextInt();

    }

    System.out.println("Thank you and goodbye!");

}

    public String name;
    public int age;    

    public void setName( String friendsName )
    {
        name = friendsName;
    } 
    public void setAge( int friendsAge )
    {
        age = friendsAge;
    }
    public String getName()
    {
        return name;
    }
    public int getAge()
    {
        return age;
    }
}

3 个答案:

答案 0 :(得分:13)

您尝试实例化Friends类的对象,如下所示:

Friends f = new Friends(friendsName, friendsAge);

该类没有带参数的构造函数。您应该添加构造函数,或者使用确实存在的构造函数创建对象,然后使用set-methods。例如,而不是上述:

Friends f = new Friends();
f.setName(friendsName);
f.setAge(friendsAge);

答案 1 :(得分:2)

默认构造函数没有参数。您需要指定一个custructor:

public Friends( String firstName, String age) { ... }

答案 2 :(得分:0)

假设您已经定义了这样的课程:

    @Data
    @AllArgsConstructor(staticName = "of")
    private class Pair<P,Q> {

        public P first;
        public Q second;
    }

因此,当您需要创建一个新实例时,它将需要使用参数,并按照注释中的定义提供它。

Pair<Integer, String> pair = Pair.of(menuItemId, category);

如果这样定义,则会收到要求的错误。

Pair<Integer, String> pair = new Pair(menuItemId, category);