我想将我的数据列表为牛顿Raphsons方法仅用于整齐数组中的二次方程式。我遇到的困难是在数组中分配变量,将xn1的先前值分配给后续行中的xn值,并在数组中具有double值。
例如(在下面的代码中)我有变量,如(n,xn,fxn,dfxn,xn1)。我想在相应的标题下分配这些变量的值,如下图所示。
在[image]中,第一行中的xn + 1值成为第二行中的xn值。我无法做到这一点。我试图在xn = xn1
结尾处for loop
,但似乎没有效果。
最后,每次我尝试将double
变量值分配给double array[][]
时,都会显示错误double cannot be converted to double[]
。
代码:
import java.util.Scanner;
import java.lang.Math;
import java.util.Formatter;
public class Newton {
static double a, b, c;
static double n = 1;
static double xn;
static double fxn;
static double dfxn;
static double xn1;
public static void main(String args[]) {
Scanner s = new Scanner(System.in);
System.out.println("Enter a");
double a = s.nextDouble();
System.out.println("Enter b");
double b = s.nextDouble();
System.out.println("Enter c");
double c = s.nextDouble();
System.out.println("Enter The value you want to start with");
double xn = s.nextDouble();
fxn = a * Math.pow(xn, 2) + b * xn + c;
dfxn = 2 * a * xn + b;
xn1 = xn - (fxn / dfxn);
double array[][] = { n, xn, fxn, dfxn, xn + 1 };
System.out.println();
System.out.println("n\t" + "Xn\t" + "fXn\t" + "dfXn\t" + "Xn+1");
array(array);
}
public static void array(int x[][]) {
for (int row = 0; row < x.length; row++) {
for (int column = 0; column < x[row].length; column++) {
System.out.print(x[row][column] + "\t");
}
System.out.println();
}
}
}
答案 0 :(得分:1)
至于此:double array[][] = {n, xn, fxn, dfxn, xn+1};
因为它是一个二维数组,所以它的初始化方式与其他数组不同:
double[][] array = new double[][]{
{ n, xn, fxn, dfxn, xn+1}
};
现在,因为xn+1
是一个操作,所以要将其括起来以便将其分配给数组:
double[][] array = new double[][]{
{ n, xn, fxn, dfxn, (xn+1)}
};
此外,当您致电array(array);
时,您尝试将double
数组传递给int
方法。尝试更改方法的构造函数:
public static void array(double[][] array){
//...
}
最后,您需要在调用scanner
方法之前关闭array
,以防止资源泄露:s.close();
答案 1 :(得分:1)
我在代码中发现的错误/错误是
初始化双打数组
而是加倍array[][] = { n, xn, fxn, dfxn, xn + 1 };
它应该是double array[][] = { { n, xn, fxn, dfxn, xn + 1 } };
您应该更改方法array
的方法签名
而是public static void array(int x[][]) {
使用public static void array(double x[][]) {
你永远不会关闭stram s
将s.close()
添加到main方法的末尾。