Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在数组上使用Math.pow组合的相对误差为1%_Java_Arrays_For Loop_While Loop - Fatal编程技术网

Java 在数组上使用Math.pow组合的相对误差为1%

Java 在数组上使用Math.pow组合的相对误差为1%,java,arrays,for-loop,while-loop,Java,Arrays,For Loop,While Loop,我想知道如何从必须由多个变量访问的单个数组中访问和计算值。情况是,给定一个包含这些元素的类型为double的数组-5.0, -4.0, -3.0, -2.0, -1, -1 / 2, -1 / 3, -1 / 4, 0, 1 / 4, 1 / 3, 1 / 2, 1, 2, 3, 4, 5 目标是将其与Math.pow()函数结合使用,对w、x、y和z进行一系列计算,直到这些计算的组合与输入的原始数字的相对误差在1%以内。例如,用户输入3.14作为起始值,然后输入4个不等于1的正数作为值w、x

我想知道如何从必须由多个变量访问的单个数组中访问和计算值。情况是,给定一个包含这些元素的类型为double的数组-5.0, -4.0, -3.0, -2.0, -1, -1 / 2, -1 / 3, -1 / 4, 0, 1 / 4, 1 / 3, 1 / 2, 1, 2, 3, 4, 5 目标是将其与Math.pow()函数结合使用,对w、x、y和z进行一系列计算,直到这些计算的组合与输入的原始数字的相对误差在1%以内。例如,用户输入3.14作为起始值,然后输入4个不等于1的正数作为值w、x、y和z。目标是使用Math.pow()函数将w、x、y和z提升为幂,指数是powerArray的元素。这些功率必须在while循环和for循环内改变,直到w、x、y和z的乘积提升到powerArray元素的某个组合,与原始3.14的相对误差在1%以内。我的问题是如何在while循环中访问这个powerArray,并能够在访问变量w、x、y和z的数组时更改索引,直到这些幂的乘积在原始数的1%相对误差范围内。请帮忙:)

}

到目前为止,还没有一个测试用例产生以下结果。。。
为epilson u:3.14输入一个值
输入w:13的值
输入x:5的值
输入y:200的值
输入z:99的值

使值更接近Epilson的指数是-5.0,-5.0,-5.0,-5.0。最终值是0.0,在3.14的0.1%以内

我没有时间仔细检查代码,但是。您可以在
while
循环之外执行一次计算,并将其存储为变量
x
。然后循环,直到该值不是您想要的:

i、 e


在循环内部重复在外部执行的操作,并更新和
x
变量。然后在循环结束后,输入当
x
实际保持可接受值时要执行的操作。

请尽可能查看。到目前为止,我得到的最多是四个while循环
import java.util.Scanner;
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
double epilson, valueW, valueX, valueY, valueZ;
int i = 0, j = 0, k = 0, l = 0;
double approx = 0;
boolean checkValue = true;
double[] powerArray = { -5.0, -4.0, -3.0, -2.0, -1, -1 / 2, -1 / 3,
        -1 / 4, 0, 1 / 4, 1 / 3, 1 / 2, 1, 2, 3, 4, 5 };


System.out.print("Enter a value for epilson u: ");
epilson = keyboard.nextDouble();
while (checkValue) {
    System.out.print("Enter value for w: ");
    valueW = keyboard.nextDouble();
    System.out.print("Enter value for x: ");
    valueX = keyboard.nextDouble();
    System.out.print("Enter value for y: ");
    valueY = keyboard.nextDouble();
    System.out.print("Enter value for z: ");
    valueZ = keyboard.nextDouble();

    if ((valueW == 1) || (valueX == 1) || (valueY == 1)
            || (valueZ == 1)) {
        System.out.println("Values of w,x,y,z must not be equal to 1.");

    } else {

        boolean iterator = true;
        while (iterator) {

            if (approx >= (epilson * 0.01)) {
                iterator = false;
            } else {
                approx = Math.pow(valueW, powerArray[i])
                        * Math.pow(valueX, powerArray[j])
                        * Math.pow(valueY, powerArray[k])
                        * Math.pow(valueZ, powerArray[l]);
                i++;
                j++;
                k++;
                l++;
            }

        }

    }
    System.out.print("The exponents that bring value closer to Epilson are "
            + powerArray[i] + ", " + powerArray[j] + ", "
            + powerArray[k] + ", " + powerArray[l]);
    System.out.println();
    System.out.println("The final value is " + approx
            + " which is within 0.1% of " + epilson);
    checkValue = false;
}
while( x > someOtherValue)
    // do something