我只是想在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;
}
}
答案 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}}中添加persons
和main
,并且仅使用比较逻辑保持您的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()
方法。