2012-01-14 2 views
0
public static double Num (JTextField field){ 
    String s1 = field.getText(); 
    String n = new String ("N"); 
    String e = new String ("E"); 
    String w = new String ("W"); 
    String s = new String ("S"); 
    if (s1.equalsIgnoreCase(n)){ 
    return 1;} 
    else if (s1.equalsIgnoreCase(e)){ 
    return 1;} 
    else if (s.equalsIgnoreCase(s)){ 
    return -1;} 
    if (s1.equalsIgnoreCase(w)){ 
    return -1;} 
} 

Привет Я новичок в программировании на Java. Ну, я просто хотел вернуть определенные значения из двойника. Я присоединяю часть кода. Я выбрал double, потому что мне нужно использовать его значение в последующих разделах основного кода класса.Возврат значения из double с использованием операторов if/else/if

После этого я получаю сообщение об ошибке говорящее

Этот метод должен возвращать результат типа двойной.

И программа предлагает добавить (еще один) возврат в конце.

+0

Не нужно создавать 'new String (« N »)', просто сравните, как теперь, с '' N ''. Можете подумать о логическом или ('' ''). –

ответ

0

Я не знаю Java, но они выглядят как проблемы.

Вы возвращаете целое число во многих местах. Я думаю, что это должно быть 1.0 или что-то подобное для Java, чтобы вы могли его вернуть. Кроме того, у вас нет возврата в случае, если не совпадают условия if/else. Это означает, что ваша функция не может вернуть двойной, который также является потенциальной ошибкой. Это предложение.

+0

На самом деле, java-компиляторы могут приводить целые числа к удвоениям, так что возвращение 1 также принимается как двойное значение. – TonioElGringo

1

1 и -1 представляют собой целые числа. Он ожидает возвращения float, а не int. Если вы хотите вернуть Int вместо этого, изменить «двойной» на «ИНТ»:

public static int Num (JTextField field){ 

В качестве альтернативы, если вы хотите вернуть поплавок, добавьте».0" для возвращаемых значений;

return 1.0; 
return -1.0; 

Причина это говорит вам, что нужно еще оператор возврата в конце метода, потому что это необходимо вернуть что-то, и нет никакого способа, чтобы быть уверенным, что ваш метод возвращает что-то. Если вы знаете, один из, если всегда будет верно, вы можете изменить последний, если еще:

if (s1.equalsIgnoreCase(n)) 
    return 1.0; 
else if (s1.equalsIgnoreCase(e)) 
    return 1.0 
else if (s.equalsIgnoreCase(s)) 
    return -1.0; 
else 
    return -1.0; 

Если все они могут быть ложными в то же время, вы должны добавить еще один возвращение в конце, чтобы сделать обязательно верните значение;

if (s1.equalsIgnoreCase(n)) 
    return 1.0; 
else if (s1.equalsIgnoreCase(e)) 
    return 1.0 
else if (s.equalsIgnoreCase(s)) 
    return -1.0; 
else if (s.equalsIgnoreCase(w)) 
    return -1.0; 
return 0.0; 
+0

Вместо того чтобы возвращать некоторую сомнительную ценность, это, вероятно, лучшая идея бросить исключение какой-либо среды выполнения. В конце концов, мы явно не ожидаем, что строка НЕ ​​будет равна одному из заданных здесь параметров, поэтому возврат мусора просто усложнит процесс отладки. – Voo

1

Вам необходимо обработать случай, когда ни одна из указанных вами букв не соответствует тексту поля. В этом случае не вызывается ни один из ваших четырех операторов return, и Java не знает, какое значение нужно вернуть. Решение - как уже указывал компилятор - добавить оператор return в конец тела метода, который возвращает значение по умолчанию.

2

Вы должны добавить оператор return вне всех операторов if/else if. Компилятор дает ошибку, потому что во время компиляции он обнаруживает, что эта программа не может вернуть какое-либо значение, если ни одно из операторов if не будет удовлетворено.

Согласно вашей логике, вы можете предположить, что один из операторов if будет определенно удовлетворен, но компилятор этого не знает. Поэтому вы должны добавить фальшивое возвращаемое значение (например, return 0), чтобы компилятор не выдавал ошибку.

0

Если вы объявляете тип возвращаемого значения в методе, вам всегда нужно возвращать что-то подобное.

В вашем случае, если текст не является ни N, E, W, ни S, тогда ничего не будет возвращено.Java не позволяет этого.

Если текст всегда должен быть одним из этих значений, генерирует исключение и обрабатывает его в вызывающем коде. в противном случае вернуть значение по умолчанию.

Вам не нужно объявлять тип возврата как двойной, потому что позже вам нужны двойные значения. Просто верните int, он будет неявным образом брошен в double в любом случае.

Кроме того, вам не нужно создавать объект String для всего, это просто взрывает ваш код без лишних событий. Просто напишите: if (s1.equalsIgnoreCase ("N")