2017-04-19 141 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()到主要方法的結束。