Сравнительная функция сравнения
Я пытаюсь сравнить функцию сравнения по двум улицам. Я работаю над строкой (название улицы) адреса в данный момент. Пока у меня есть следующий код. В конце концов я тоже хочу иметь возможность сравнивать номера улиц, но я бы хотел сначала исправить этот код. Всякий раз, когда я пытаюсь скомпилировать этот код, я получаю следующую ошибку:
StreetAddress.java:45: error: constructor StreetAddress in class StreetAddress cannot be applied to given types;
StreetAddress add1 = new StreetAddress("cartesian road");
^
required: no arguments
found: String
reason: actual and formal argument lists differ in length
StreetAddress.java:46: error: constructor StreetAddress in class StreetAddress cannot be applied to given types;
StreetAddress add2 = new StreetAddress("cartesian road");
^
required: no arguments
found: String
reason: actual and formal argument lists differ in length
StreetAddress.java:47: error: constructor StreetAddress in class StreetAddress cannot be applied to given types;
StreetAddress add3 = new StreetAddress("n kings street");
^
required: no arguments
found: String
reason: actual and formal argument lists differ in length
StreetAddress.java:48: error: constructor StreetAddress in class StreetAddress cannot be applied to given types;
StreetAddress add4 = new StreetAddress("pioneer parkway");
^
required: no arguments
found: String
reason: actual and formal argument lists differ in length
StreetAddress.java:49: error: constructor StreetAddress in class StreetAddress cannot be applied to given types;
StreetAddress add5 = new StreetAddress("starry avenue");
^
required: no arguments
found: String
reason: actual and formal argument lists differ in length
5 errors
public class StreetAddress implements Comparable<StreetAddress>
{
protected int num;
protected String stName;
public void StreetAddress(int n, String s){
num = n;
stName = s;
}
public int getNum(){
// returns the street number
return num;
}
public String getName(){
// returns the street name
return stName;
}
public int compareTo(StreetAddress street) throws ClassCastException{
// exception prevents crash if an address is not compared to
// another address
StreetAddress x = (StreetAddress) street;
int compareName = this.stName.compareTo(street.stName);
if (compareName < 0){
// first address comes after compared address
System.out.println("test<0");
}
else if (compareName == 0){
// same address
System.out.println("test equal");
}
else{
// first address comes before compared address
System.out.println("test > 0");
}
}
public static void main(String args[])
{
StreetAddress add1 = new StreetAddress("cartesian road");
StreetAddress add2 = new StreetAddress("cartesian road");
StreetAddress add3 = new StreetAddress("n kings street");
StreetAddress add4 = new StreetAddress("pioneer parkway");
StreetAddress add5 = new StreetAddress("starry avenue");
add1.compareTo(add2);
add4.compareTo(add1);
add3.compareTo(add3);
add2.compareTo(add5);
}
}
2 ответа
Проблема, как вы заметили, связана с:
compareName == this.stName - (street.stName);
Вы не можете вычесть строки. Способ получить результат, который, я думаю, вы ищете:
int result = this.stName.compareTo(street.stName);
Очевидно, это предполагает, что stName
это String
, Если нет, вам придется реализовать compareTo
в классе, который stName
есть, как я вижу, вы сделали в редактировании. Проблема, о которой вы сообщаете при редактировании, заключается в следующем:
class StreetName {
// Constructor
StreetName(int n, String st) {
// code
}
}
Однако вы пытаетесь создать экземпляр класса следующим образом:
StreetName fred = new StreetName("name");
Вы только отправляете конструктору String
и не int
с этим. Предполагая, что число важно, вам нужно изменить это на:
StreetName fred = new StreetName(number, "name");
Что значит вычесть одну строку из другой? Это не совсем имеет смысла. Вместо этого, как насчет вызова собственной строки compareTo(...)
метод в этом месте. Плюс ==
Оператор не должен быть там:
int compareName = stName.compareTo(street.stName);
Кроме того, ваш метод compareTo определен так, чтобы возвращать int, и поэтому ему лучше вернуть это int. Прямо сейчас это ничего не возвращает.