web-dev-qa-db-fra.com

"La longueur des listes d'arguments formelles ou formelles est différente"

Lorsque j'essaie de mettre quelque chose entre les crochets () de Friends f = new Friends(friendsName, friendsAge);, l'erreur suivante apparaît: 

Les amis constructeurs en classe Les amis ne peuvent pas être appliqués à des types donnés . Obligatoire: pas d'argument. Trouvé: String, int. Raison: réelle ou formelle les listes d'arguments diffèrent par leur longueur.

Mais lorsque je retire les arguments, ma liste d'amis n'affiche que "null 0". Les valeurs ne sont-elles pas définies même si j'ai String friendsName = input.next();?

De plus, quand j'essaie de renvoyer un ami, il ne fait rien. Dans le code source, un avertissement s’affiche, 

Appel suspect à util.Java.Collection.remove: un objet donné ne peut pas contient des instances données de String (amis attendus).

Je suis confus sur ce que tout cela signifie?

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

Vous essayez d'instancier un objet de la classe Friends comme ceci:

Friends f = new Friends(friendsName, friendsAge);

La classe n'a pas de constructeur qui prend des paramètres. Vous devez soit ajouter le constructeur, soit créer l'objet à l'aide du constructeur existant, puis utiliser les méthodes set. Par exemple, au lieu de ce qui précède:

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

Le constructeur par défaut n'a pas d'argument. Vous devez spécifier un custructor:

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