Страницы

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

понедельник, 25 марта 2019 г.

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

Здравствуйте! Начал осваивать ООП и столкнулся с проблемой, решил написать класс 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. Подскажите новичку, что я делаю не так?


Ответ

// 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; }

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

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