Ошибка без возвращаемого типа

#java

#java

Вопрос:

привет, я получаю сообщение об ошибке в моем методе, в котором говорится, что у моего метода нет возвращаемого типа, что сбивает с толку, потому что у него есть возвращаемый тип;

 public double getPhoneRates() {

    final int freeminutes=50;
    double totalcharge;
    double chargeperminute = 0.10;
    double d = 0;

    if(b.regularService() == true){
        if(b.getMinutes()<=50)
            return totalcharge=0;
        else 
            d=b.getMinutes()-freeminutes;

        d = d * chargeperminute;
        return totalcharge= freeminutes  d;
    }
}
  

Комментарии:

1. logic101 — вы могли бы попробовать отформатировать свой пример кода, чтобы его было легче читать. Это помогло бы кому-то, пытающемуся ответить на ваш вопрос.

2. да, но она вложена в ваш if-оператор

3. Это весь метод? В нем отсутствует как минимум закрывающая скобка

4. Что, если b.regularService() == false ? Тогда ваша функция ничего не возвращает (иначе говоря, double не возвращается!).

5. для всех путей кода требуется оператор return.

Ответ №1:

Попробуйте это:

 public double getPhoneRates()
{
  final int freeminutes = 50;
  double chargeperminute = 0.10;
  double d = 0;
  if (b.regularService() == true)
  {
    if (b.getMinutes() <= 50) return 0; //return 0
    else d = b.getMinutes() - freeminutes; 
    d = d * chargeperminute; 
    return freeminutes   d; //return result
  }

  return -1; //some default value
}
  

Комментарии:

1. @Peter, я просто выбрал произвольный #, укажите, что хочет OP по умолчанию

2. Если телефонная компания когда-нибудь начнет взимать плату по ставке -1, я присоединюсь завтра. 😉

Ответ №2:

Следующий код должен работать для вас:

 public double getPhoneRates()
{
  final int freeminutes = 50;
  double chargeperminute = 0.10;
  double d = 0;
  if (b.regularService() == true)
  {
    if (b.getMinutes() <= 50) return 0;
    else d = b.getMinutes() - freeminutes;
    d *= chargeperminute;
    d  = freeminutes;
  }
  return d;
}
  

Во всех случаях в вашем методе должен быть возврат.

И обычно это лучший код, который возвращает только в одном месте из метода.

Ответ №3:

Проверьте свои фигурные скобки. Вы не всегда выполняете оператор return в своем методе.

Ответ №4:

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