"Actual or formal argument lists differs in length"
Solution 1
You try to instantiate an object of the Friends
class like this:
Friends f = new Friends(friendsName, friendsAge);
The class does not have a constructor that takes parameters. You should either add the constructor, or create the object using the constructor that does exist and then use the set-methods. For example, instead of the above:
Friends f = new Friends();
f.setName(friendsName);
f.setAge(friendsAge);
Solution 2
The default constructor has no arguments. You need to specify a constructor:
public Friends( String firstName, String age) { ... }
Solution 3
Say you have defined your class like this:
@Data
@AllArgsConstructor(staticName = "of")
private class Pair<P,Q> {
public P first;
public Q second;
}
So when you will need to create a new instance, it will need to take the parameters and you will provide it like this as defined in the annotation.
Pair<Integer, String> pair = Pair.of(menuItemId, category);
If you define it like this, you will get the error asked for.
Pair<Integer, String> pair = new Pair(menuItemId, category);
Related videos on Youtube
user2585969
Updated on July 09, 2022Comments
-
user2585969 almost 2 years
When I try to put something in the () brackets of
Friends f = new Friends(friendsName, friendsAge);
it comes up with the error:Constructor Friends in class Friends cannot by applied to given types. Required: no arguments. Found: String, int. Reason: actual or formal argument lists differ in length.
But when I take out the arguments my friends list only displays "null 0". Are the values not set even though I have
String friendsName = input.next();
?Also, when I try to remove a friend, it doesn't do anything. In the source code it does bring up a warning,
Suspicious call to util.java.Collection.remove: Given object cannot contain given instances of String (expected Friends).
I'm confused on what that all means?
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; } }
-
nanofarad almost 11 yearsYou need to make a constructor for
Friends(
.
-
-
resueman almost 11 yearsHe actually does have some properties on it. They're just located above the getters/setters instead of at the top.
-
user2585969 almost 11 yearsAwesome. Thanks for the help! Do you have any idea why the "friendsList.remove(input.next());" isn't happy?
-
PaulProgrammer almost 11 yearsYou can't remove a
String
from a list that containsFriend
objects. You'll have to iterate through the list ofFriend
and find theFriend
that has the name the same as what was entered. -
PaulProgrammer almost 11 yearsNote that I consider the "empty constructor + modifiers" an anti-pattern. I don't think that it's a good idea to be able to construct objects that can't be used, or would cause errors or other surprises until they're initialized in subsequent (possibly forgotten) steps.
-
Joni almost 11 yearsI'm not a fan either but they have their uses in certain types of programs (think java beans and dtos)
-
JavaYouth over 6 yearsI had a similar issue. But the constructor was there in another project that my project was dependent on. Eclipse did not complain but I got compile time on mvn install. I am wondering how this could be possible. Although I got it resolved using setters as mentioned in the accepted answer, I am just curious to know what was wrong.