2017-04-19 115 views
2

我想我的制表为牛顿Raphsons方法数据仅供整齐地排列类似二次方程。我遇到的困难是在数组中分配变量,将先前的xn1值分配给后续行中的xn值,并在数组中使用double值。牛顿Raphsons方法的Java

例如(在我的代码如下所示)我有变量,如(N,XN,FXN,dfxn,XN1)。我想分配这些变量的值,如下图所示。

enter image description here

在[图像],第一行中的XN + 1个值成为第二行中的XN值。我遇到了麻烦。我试图在for loop的末尾做xn = xn1,但这似乎不起作用。

最后,每次我尝试将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(); 
     } 
    } 
} 

回答

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

  2. 你应该对方法array
    相反public static void array(int x[][]) {
    使用public static void array(double x[][]) {

  3. 你从来没有接近STRAM s改变方法签名。
    添加s.close()到主要方法的结束。