我正在尝试比较目录中两个学生的姓氏,我是通过覆盖compareTo方法来做到这一点的。以下代码并没有完全反映出我想在这里做什么,返回值现在只是一个占位符。它说它不会编译,因为它无法在类String中找到subString(int)的符号。
for (int i = 0; i < this.getLastName().length(); i++) {
if (!this.getLastName().subString(i).equals(s.getLastName().subString(i))) {
return 1;
}
}
更新:我很感激你们都指出我的白痴在灵敏度上(不是真的,谢谢)这里是我在代码中所处位置的更新。我想我可以从这里开始。
@Override
public int compareTo(Student s) {
for (int i = 0; i < this.getLastName().length(); i++) {
if (!this.getLastName().equals(s.getLastName())) {
for(int j = 0; j < this.getLastName().length() || j < s.getLastName().length(); j++) {
if (this.getLastName().charAt(j) < s.getLastName().charAt(j)) {
return 1;
}
else {
return -1;
}
}
}
}
再看一遍,我甚至不需要那个第一次循环。
这是完成的方法。
@Override
public int compareTo(Student s) {
if (!this.getLastName().equals(s.getLastName())) {
for(int j = 0; j < this.getLastName().length() || j < s.getLastName().length(); j++) {
if (this.getLastName().charAt(j) < s.getLastName().charAt(j)) {
return 1;
}
else if (this.getLastName().charAt(j) > s.getLastName().charAt(j)) {
return -1;
}
}
}
if (!this.getFirstName().equals(s.getFirstName())) {
for (int i = 0; i < this.getLastName().length() || i < s.getLastName().length(); i++) {
if (this.getFirstName().charAt(i) < s.getFirstName().charAt(i)) {
return 1;
}
else if (this.getFirstName().charAt(i) > s.getFirstName().charAt(i)) {
return -1;
}
}
}
return 0;
}
答案 0 :(得分:0)
比较两个Java字符串的简单方法是使用String.compareTo(String)
。你不需要自己使用循环来实现它。 (或者至少,不是在现实世界中。)
如果您想按姓氏排序,请输入名字:
call `compareTo` on the last name string
- if the result is non zero, return it
- if the result is zero, compare the first name string.
我会让你弄清楚剩下的......因为这显然是一次学习练习&#34;。
答案 1 :(得分:0)
不确定为什么要重新发明轮子。斯蒂芬C试图指出你可以达到这样的结果:
@Override
public int compareTo(Student that) {
int compare = this.getLastName().compareTo(that.getLastName());
if (compare == 0) {
compare = this.getFirstName().compareTo(that.getFirstName());
}
return compare;
}