Сравнительная функция сравнения

Я пытаюсь сравнить функцию сравнения по двум улицам. Я работаю над строкой (название улицы) адреса в данный момент. Пока у меня есть следующий код. В конце концов я тоже хочу иметь возможность сравнивать номера улиц, но я бы хотел сначала исправить этот код. Всякий раз, когда я пытаюсь скомпилировать этот код, я получаю следующую ошибку:

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. Прямо сейчас это ничего не возвращает.

Другие вопросы по тегам