2013-07-19 8 views
9

Kiedy próbuję umieścić coś w() nawiasach Friends f = new Friends(friendsName, friendsAge); przychodzi się z błędem:„Listy argumentów Faktyczne lub formalne różni się długością”

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.

Ale kiedy wyjąć argumenty moja lista znajomych wyświetla tylko "null 0". Czy wartości nie są ustawione, mimo że mam String friendsName = input.next();?

Ponadto, gdy próbuję usunąć znajomego, nie robi nic. W kodzie źródłowym wywołuje ostrzeżenie, jestem zdezorientowany, co to wszystko znaczy?

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

Musisz zrobić konstruktor 'Przyjaciele (' – hexafraction

Odpowiedz

7

spróbować instancję obiektu klasy Friends tak:

Friends f = new Friends(friendsName, friendsAge); 

klasa nie posiada konstruktora, który wymaga parametrów. Powinieneś dodać konstruktora lub utworzyć obiekt za pomocą konstruktora, który istnieje, a następnie użyć metod set. Na przykład, zamiast powyższego:

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

Awesome.Dziękuję za pomoc! Czy masz jakiś pomysł, dlaczego "friendsList.remove (input.next());" nie jest szczęśliwy? – user2585969

+1

Możesz " t usuń 'String' z listy zawierającej obiekty' Friend'. Musisz przejrzeć listę "Friend" i znaleźć "Friend", który ma taką samą nazwę, jak to, co podano. – PaulProgrammer

+2

rozważ "pustych konstruktorów + modyfikatory" anty-wzór.Nie myślę, że to dobry pomysł, aby móc zbudować ob nie mogą być używane lub mogą powodować błędy lub inne niespodzianki, dopóki nie zostaną zainicjowane w kolejnych (prawdopodobnie zapomnianych) krokach. – PaulProgrammer

1

Domyślny konstruktor nie ma argumentów. Trzeba określić custructor:

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

On rzeczywiście ma pewne właściwości na nim Oni tylko się nad pobierające/ustawiające zamiast u.. – resueman

+0

Dzięki za wskazanie, że edytowałem moją odpowiedź – PaulProgrammer