“Eigenlijke of formele argumentlijsten verschillen in lengte”

Als ik iets tussen de () haakjes van Friends f = new Friends(friendsName, friendsAge);probeer te zetten, krijg ik de foutmelding:

Constructor Vrienden in de klas Vrienden kunnen niet worden toegepast op bepaalde typen.
Vereist: geen argumenten. Gevonden: String, int. Reden: feitelijk of formeel
argumentlijsten verschillen in lengte.

Maar als ik de argumenten verwijder, geeft mijn vriendenlijst alleen “null 0” weer. Zijn de waarden niet ingesteld, ook al heb ik String friendsName = input.next();?

Als ik een vriend probeer te verwijderen, gebeurt er ook niets. In de broncode wordt wel een waarschuwing weergegeven,

Verdachte aanroep naar util.java.Collection.remove: gegeven object kan niet
bepaalde instanties van String bevatten (verwachte vrienden).

Ik weet niet wat dat allemaal betekent?

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;
    }
}

Antwoord 1, autoriteit 100%

Je probeert een object van de klasse Friendsals volgt te instantiëren:

Friends f = new Friends(friendsName, friendsAge);

De klasse heeft geen constructor die parameters nodig heeft. U moet de constructor toevoegen of het object maken met behulp van de constructor die wel bestaat en vervolgens de set-methoden gebruiken. Bijvoorbeeld, in plaats van het bovenstaande:

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

Antwoord 2, autoriteit 10%

De standaardconstructor heeft geen argumenten. U moet een constructor specificeren:

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

Antwoord 3, autoriteit 5%

Stel dat je je klas als volgt hebt gedefinieerd:

   @Data
    @AllArgsConstructor(staticName = "of")
    private class Pair<P,Q> {
        public P first;
        public Q second;
    }

Dus wanneer u een nieuwe instantie moet maken, moet deze de parameters aannemen en u geeft deze als volgt op zoals gedefinieerd in de annotatie.

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

Als u het als volgt definieert, krijgt u de gevraagde fout.

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

Other episodes