Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

Проблемы с созданием метода для класса

#классы #java #методы


Здравствуйте! Начал осваивать ООП и столкнулся с проблемой, решил написать класс
matematik и несколько методов в нем. Первым стал возведение в степень. Вот код:
public class matematik {
  public int result;
  public int erection (int a, int n) {
      if (n>0) {
        for(int i = 1; i <= n; i++) {
            result = 1;
            result = result * a;
        }
      return result;
    }
      if (n<0){
          for(int i = n; i <= 1; i++){
              result = 1;
              result = result/a;
          }
        return result;
      }
  }
}

Эклипс ругается на вот эту строчку "public int erection (int a, int n)" 

This method must return a result of type int.

Подскажите новичку, что я делаю не так?    


Ответы

Ответ 1



// matematik - неправильно, правильно mathematic. // а кроме того в java принято называть классы с заглавной class Mathematic { // есть смысл сделать метод статичным, // - т.к. его выполнение не повлияет на состояние класса public static int power(int base, int power) { // эта переменная не может быть полем // потому что нет смысла хранить временные данные за пределами данного // метода int result = 0; if (power > 0) { for (int i = 1; i <= power; i++) { result = 1; result = result * base; } // мы в любом случае будем возвращать результат // посему именно здесь можно не возвращать результат // return result; } else if (power < 0) { // чутье подсказывает что этот код работает неправильно for (int i = power; i <= 1; i++) { result = 1; result = result / base; } // мы в любом случае будем возвращать результат // посему именно здесь можно не возвращать результат // return result; } // результат возвращаем в любом случае return result; } } имеет смысл рассмотреть частные случаи: 1) степень равна 0 2) степень равна 1 3) степень меньше 0 4) степень - дробное число последний частный случай подразумевает что у вас степень может быть не только целочисленным значением, но еще и дробным. а посему лучше поменять тип данных int на double, но не думаю что есть смысл рассматривать этот вариант, т.к. его реализация не так уж проста. с другой стороны возможность задания негативной степени показывает что на входе функции может быть дробное число (5^-2 = 1/5^2 = 1/25). код учитывая все вышесказанное: public static double power(double base, int power) { // сначала обрабатываем частные случаи // это нужно чтоб наш код не делал лишних действий // возведение 0 в любую степень даст 0 // в случае когда степень будет отрицательной // придется делить на 0 if (0 == base) { return 0; } // если степень равна единице, то выполнять возведение бесполезно // if (1.0 == power) { - неправильно (1.0 имеет тип double) // спасибо @avp что заметил, так будет правильно if (1 == power) { return base; } // если степень отрицательная: то 2^(-3) = 1/(2^3) if (0 > power) { return power(1 / base, -power); } // будет хранить результат в этой переменой double result = base; // само вычисление for (int i = 1; i < power; i++) { result = result * base; } return result; }

Ответ 2



Надо перед 2 с конца скобки добавить return null;

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

Отправить комментарий