将对象添加到ArrayList没有错误

时间:2015-03-26 16:17:31

标签: java

我只是想在eclipse中向ArrayList添加一些对象,但是我想在'persons.add(one);'下得到一个错误(语法错误,插入“...... VariableDeclaratorId”来完成FormalParameterList)。知道我做错了吗?

package thequestion;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class PersonComparator implements Comparator<Person>{

   @Override
   public int compare(Person o1, Person o2) {
       return 0;
   }

   Person one = new Person("Kevin", "Gresmer");
   List<Person> persons = new ArrayList<Person>();

   persons.add(one);

   public void sortByLastName(List people) {
       Comparator comp = new PersonComparator();
       Collections.sort(people, comp);
   }
}


public class Person {
    private String firstName = null;
    private String lastName = null;

    public Person(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

4 个答案:

答案 0 :(得分:1)

persons.add(one)是一个语句,你不能在代码块之外有一个语句(方法,构造函数等)。此外,您的Comparator应包含与您正在进行的比较相关的代码。我认为它不是存储列表或实施sortByLastName()方法的正确位置。

答案 1 :(得分:0)

sortByLastName方法下面。目前下面的代码片段不在任何方法下。

    persons.add(one);

正确的代码应该是

public void sortByLastName(List people) {

       persons.add(one);
       Comparator comp = new PersonComparator();
       Collections.sort(persons , comp);
   }

请注意: - 但我的回答是编译错误。理想情况下,比较器应该只有与比较相关的代码。没有其他的。

答案 2 :(得分:0)

您只能在类中和方法外部初始化实例变量。 你初始化了人。然后要应用方法,您需要将该行放入某些方法中。因此,您可以更新Sort方法或创建新方法,并从sort方法引用该方法。

  • 上述评论中解释的第一个选项。

    class PersonComparator实现了Comparator {

       @Override
       public int compare(Person o1, Person o2) {
           return 0;
       }
    
       Person one = new Person("Kevin", "Gresmer");
       List<Person> persons = new ArrayList<Person>();
    
       private void addPersons(){
         persons.add(one);
       }
                      //persons.add(one);
    
       public void sortByLastName(List people) {
           addPersons();
           Comparator comp = new PersonComparator();
           Collections.sort(people, comp);
       }
    }
    

重点是除了Instance变量之外我们不能写任何东西。我们必须用方法来掩盖它们。我希望这能解决你的问题。

答案 3 :(得分:0)

显然,你不能在类声明的中间做persons.add(...)

您当然应该在课程one的{​​{1}}中添加personsmain,并且仅使用比较逻辑保持您的Person课程清晰。 Comparator将允许您测试代码。 main的相同想法可以在sortByLastName(...)类中将其声明为static。 然后你可以使用main进行测试,例如

Person

请注意,为了提供合理的输出,您需要在// In class `Person` public static void main(String[] args) { List<Person> persons = new ArrayList<Person>(); Person one = new Person("Kevin", "Gresmer"); persons.add(one); Person two = new Person("Elvis", "Presley"); persons.add(two); System.out.println(sortByLastName(persons)); } 类中添加toString()方法。