2013-07-19 1 views
9

Когда я пытаюсь поставить что-то в() скобках Friends f = new Friends(friendsName, friendsAge); он приходит с ошибкой:«Фактические или формальные списки аргументов отличается по длине»

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.

Но когда я вынимаю аргументы мой список друзей отображается только «null 0». Значения не установлены, хотя у меня есть String friendsName = input.next();?

Кроме того, когда я пытаюсь удалить друга, он ничего не делает. В исходном коде появляется предупреждение,

Suspicious call to util.java.Collection.remove: Given object cannot contain given instances of String (expected Friends).

Я в замешательстве, что все это значит?

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

Вам нужно сделать конструктор для 'друзей (' – hexafraction

ответ

7

Вы пытаетесь создать экземпляр объекта в Friends класса, как это:

Friends f = new Friends(friendsName, friendsAge); 

Класс не имеет конструктор, который принимает параметры. Вы должны либо добавить конструктор, либо создать объект с помощью существующего конструктора, а затем использовать set-methods. Например, вместо того выше:

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

Awesome. Спасибо за помощь! У вас есть идеи, почему «friendsList.remove (input.next());» не устраивает? – user2585969

+1

Вы можете ' t удалите 'String' из списка, содержащего объекты' Friend'. Вам нужно будет перебирать список «Друг» и находить «Друг», который имеет имя так же, как и введенное. – PaulProgrammer

+2

Обратите внимание, что я рассмотрите «пустой конструктор + модификаторы» анти-шаблон. Я не думаю, что это хорошая идея, чтобы иметь возможность построить ob которые не могут быть использованы или могут вызвать ошибки или другие сюрпризы, пока они не будут инициализированы в последующих (возможно, забытых) шагах. – PaulProgrammer

1

Конструктор по умолчанию не имеет аргументов. Вы должны указать custructor:

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

Он действительно имеет некоторые свойства, на нем они просто расположены над геттеры/сеттеры, а не на.. – resueman

+0

Спасибо, что указали, что вне. отредактировал мой ответ – PaulProgrammer

Смежные вопросы