当我尝试在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;
}
}
答案 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);