2013-11-20 3 views
0

Я создаю некоторый метод, который выполняет простые вычисления математики. У меня есть квадрат, куб и метод гиперкуба. И я пытаюсь создать метод мощности, который при n = 2 вызывает квадратный метод, когда n = 3, вызывает метод куба и т. Д. Я хочу, чтобы этот метод мощности возвращал int k. Однако значение k, по-видимому, не движется с операторами if. Какие-либо предложения?Java-методы математики

public int power(int x, int n){ 
    int k; 
    if (n==2){ 
     k = square(x); 
    } 
    else if (n==3){ 
     k = cube(x); 
    } 
    else if (n==4){ 
     k = hypercube(x); 
    } 
    else if (n==1){ 
     k = x; 
    } 
    return k; 
} 
+0

Что происходит, когда вы передаете значение 'n'' 0'? '5'? – rgettman

+0

Что вы имеете в виду, что значение не было «путешествовать за пределами операторов if»? Является ли ваш метод возвратом '0' или каким-либо другим значением java defaults ints? –

+0

Что значит «значение k, похоже, не выходит за пределы утверждений if» _? Откуда вы знаете? –

ответ

1

С кодом, который я получаю от компилятора, ошибка: переменная k может быть не инициализирована ». Я предполагаю, что это то, что вы имеете в виду. Это связано с тем, что, как и в случае ошибки, если n не находится в диапазоне 1 - 4, k никогда не будет явно установлен ни в какое значение. Вот один из способов решить эту проблему, что позволяет метод работать при больших значениях n (до тех пор, пока вы не цикл мимо Integer.MAX_VALUE):

public int power(int x, int n){ 
    int k; 
    if (n==2){ 
     k = square(x); 
    } 
    else if (n==3){ 
     k = cube(x); 
    } 
    else if (n==4){ 
     k = hypercube(x); 
    } 
    else if (n==1){ 
     k = x; 
    } 
    else { 
     k = 1; 
     for (int i = 0; i < n; i++) { 
      k *= x; 
     } 
    } 
    return k; 
} 
+0

Это похоже на работу, хотя, когда я вызываю метод мощности, я получаю красный флаг, который говорит мне, что я должен установить метод мощности в статический, не могу сделать статическую ссылку на нестационарные метод мощности? –

+1

Либо измените 'power' на статический метод (' public static int power'), либо создайте экземпляр класса, в котором он находится, перед его использованием. Возможно, вам также придется ставить «квадрат», «куб» и «гиперкуб». –

+0

Созданный экземпляр, большое спасибо за помощь –

0

Вы можете использовать петлю для этого, как здесь (надеюсь, я правильно понял).

public int power(int x, int n){ 
    if(n==0) return 1; 
    int k = x; 
    while(--n > 0) { 
     k *= x; 
    } 
    return k; 
} 

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

Но, честно говоря, почему бы вам просто не использовать Math.pow()?

0

Этот код не компилируется, так как k не был инициализирован, и вы получаете ошибку компиляции: return k;. если вы хотите инициализировать с помощью 0, используйте int k=0 в декларации

0

k будет «известный» в конце метода, если он был назначен по пути. Возможно, вы в жизнь, что не недействителен значение k не может быть принят в, то он должен делать то, что вы хотите сделать:

public int power(int x, int n){ 
    if (n < 1 || n > 4){ 
     throw new IllegalArgumentException("n is invalid :" + n); 
    } 
    int k = 0; 
    if (n==2){ 
     k = square(x); 
    } 
    else if (n==3){ 
     k = cube(x); 
    } 
    else if (n==4){ 
     k = hypercube(x); 
    } 
    else if (n==1){ 
     k = x; 
    } 
    return k; 
} 

Вы также должны убедиться, что x всегда справедливо.

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