Использование метода pow () в Java - PullRequest
3 голосов
/ 30 сентября 2011

Я пишу программу на Java, в которой пользователь должен вводить целое число, n. Моя программа должна создать массив, в котором записи будут [1.25 ^ 0], [1.25 ^ 1],. , ., [1.25 ^ n]. Чтобы сделать эту работу, я попытался использовать метод pow (). Мой код для создания массива выглядит следующим образом:

for (int i = 0; i < n; i++) {
    functionG[i] = pow(1.25, n); }

Это, однако, дает мне сообщение об ошибке: «метод pow (double, int) не идентифицирован для типа Functions» (Функции - это имя моего класса).

Кто-нибудь знает, как я могу это исправить? Я почти уверен, что на правильном пути, мне просто нужно заставить метод работать правильно.

Любая помощь будет принята с благодарностью!

Ответы [ 5 ]

12 голосов
/ 30 сентября 2011

Используйте Math.pow (двойной, двойной) или статически импортируйте pow как таковой:

import static java.lang.Math.pow;
5 голосов
/ 30 сентября 2011

Конечно, вам просто нужно вызвать Math.pow(...), поскольку это статический метод в классе Math:

for (int i = 0; i < n; i++) {
    functionG[i] = Math.pow(1.25, i); 
}

Обратите внимание, что я изменил его для использованияi вместо n в качестве второго аргумента.

Вы можете также получить исходный код для компиляции, используя:

import static java.lang.Math.pow;

в операторах импорта по адресуверх вашего кода.См. Спецификацию языка Java, раздел 7.5.3 для получения подробной информации о том, как это работает.

1 голос
/ 30 сентября 2011

Вы можете решить эту проблему, как уже отмечали другие, с помощью импорта Math.pow или явного его вызова. Однако, поскольку вы всегда используете целые числа в качестве своих полномочий, Math.pow () является довольно дорогим вызовом по сравнению с прямым умножением. Я бы предложил такой метод. Это может дать вам немного другие результаты, но этого должно быть достаточно.

/**
 * Make a double[] that gives you each power of the original
 * value up to a highestPow.
 */
double[] expandedPow(double orig, int highestPow) {

    if(highestPow < 0) return new double[0];
    if(highestPow == 0) return new double[] { 0.0 };
    double[] arr = new double[highestPow + 1];
    arr[0] = 0.0;
    arr[1] = orig;
    for(int n = 2; n < arr.length; n++) {
        arr[n] = arr[n-1] * orig;
    }
    return arr;

}
1 голос
/ 30 сентября 2011

это будет связано с тем, что pow является статическим методом в классе Math (java.lang.Math).Вместо этого вы должны использовать Math.pow.

0 голосов
/ 18 ноября 2013

Решение, которое я принял, может помочь вам лучше понять некоторые вещи.

// Make it ready for the loop, no point calling Math.pow() every loop - expensive
import static java.lang.Math.pow;

public class MyPattern {

    public void showTree(int treeDepth) {

        // Create local method fields, we try to avoid doing this in loops
        int depth = treeDepth;
        String result = "", sysOutput = "";

        // Look the depth of the tree
        for( int rowPosition = 0 ; rowPosition < depth ; rowPosition++ ) {
            // Reset the row result each time
            result = "";

            // Build up to the centre (Handle the unique centre value here)
            for( int columnPosition = 0 ; columnPosition <= rowPosition ; columnPosition++ )
                result += (int) pow(2, columnPosition) + " ";

            // Build up from after the centre (reason we -1 from the rowPosition)
            for ( int columnPosition = rowPosition - 1 ; columnPosition >= 0 ; columnPosition-- )
                result += (int) pow(2, columnPosition) + " ";

            // Add the row result to the main output string
            sysOutput += result.trim() + "\n";
        }

        // Output only once, much more efficient
        System.out.print( sysOutput );
    }

    // Good practice to put the main method at the end of the methods
    public static void main(String[] args) {
        // Good practice to Create Object of itself
        MyPattern test = new MyPattern();

        // Call method on object (very clear this way)
        test.showTree(5);
    }
}
...