2016-03-05 5 views
-2
public int scoreUp(String[] key, String[] answers) { 
    int score = 0; 
    for (int i = 0; i < key.length; i++) { 
    if (key[i] == answers[i]) 
     score += 4; 
    else if (answers[i] != "?" && answers[i] != key[i]) 
     score--; 
    } 
    return score; 
} 

Это работает на http://codingbat.com/prob/p180365, но он использует == для сравнения строк вместо метода equals? Как так?Как это вернуть правильный результат?

+5

Это не ошибка компиляции ... – Tunaki

+1

не должно быть ошибки компиляции - это просто не даст вам правильных результатов, потому что сравнивает ссылки (то есть указатели), а не сам контент – noamgot

+0

Извините, я didn 't означает' compile '. Я имел в виду, как метод обрабатывает ввод и производит правильный вывод, если он сравнивает адреса объектов, а не строки? Вы можете проверить его самостоятельно, скопировать приведенный выше код и вставить его в ссылку, которую я предоставил. – Nico

ответ

0

if (key[i] == answers[i]) в допустимой ссылке сравнения между 2 строкой,

нет никаких оснований для компилятора жаловаться, на самом деле, что может быть логически способом проверить, если объекты одинаковы.

Если это правильный способ сравнения строки, это еще один вопрос.

+0

Извините, я не имел в виду «компиляцию». Я имел в виду, как метод обрабатывает ввод и производит правильный вывод, если он сравнивает адреса объектов, а не строки? Вы можете проверить его самостоятельно, скопировать приведенный выше код и вставить его в ссылку, которую я предоставил. – Nico

1

Как это правильный выход?

Если оба key массив и answer массив использует интернированных строк, то == справедливо для сравнения.

Это опасное предположение, чтобы сделать, так что программисты должны всегда использование equals() для сравнения строк, даже если интернированы гарантируется, потому что такая гарантия может исчезнуть в будущем, и тонкое неявное предположение может быть пропущено , Всегда использовать equals() является будущей защитой кода.

Смежные вопросы