2017-11-01 17 views
0

initial_guess_1とinitial_guess_2の更新された値をGoldenSectionSearchメソッドに戻しても問題がありません( "if"に関連する終了条件が満たされるまでメソッド呼び出しを試みました)。これを解決するに私の試みは自分自身が、私はここに見つけたものに影響された:更新されたパラメータ値は、元のメソッドに戻すにはどうすればよいですか?

https://softwareengineering.stackexchange.com/questions/286008/parameters-are-passed-by-value-but-editing-them-will-edit-the-actual-object-li

http://www.java-tutorial.com/java-tutorial/java-classes-methods/java-call-reference/

私はまだバックに更新された値を渡そうとして私が間違っているのかを把握することができませんでしよ方法。私は間違って何をしていますか、どうすれば修正できますか?私はプログラミングの初心者であり、可能な限り最小限の、最も簡単に理解できる用語に分解したいと思っています。

public static double GoldenSectionSearch(double x_1, double x_2, double initial_guess_1,double initial_guess_2 ,double gradient_x, double gradient_y, double a,double a_0,double a_1,double a_2,double b_0,double b_1,double p,double N){ 

      //Stuff 

     if(Math.abs((100*(x_2 - x_1*x_1)*(x_2 - x_1*x_1) + (1- x_1)*(1- x_1)) - (100*(initial_guess_2 - initial_guess_1*initial_guess_1)*(initial_guess_2 - initial_guess_1*initial_guess_1) + (1- initial_guess_1)*(1- initial_guess_1)))/Math.abs(1+(100*(initial_guess_2 - initial_guess_1*initial_guess_1)*(initial_guess_2 - initial_guess_1*initial_guess_1) + (1- initial_guess_1)*(1- initial_guess_1))) >=0.50*Math.pow(10,-6)){ 

        initial_guess_1=x_1; 
        initial_guess_2=x_2; 
        //Double Boxed_a = new Double(a); 
        Double Boxed_initial_guess_1 = new Double(initial_guess_1); 
        Double Boxed_initial_guess_2 = new Double(initial_guess_2); 


        initial_guess_1.GoldenSectionSearch(initial_guess_1); 
        initial_guess_2.GoldenSectionSearch(initial_guess_2); 
        gradient_x = (400*initial_guess_1*(initial_guess_1*initial_guess_1 - initial_guess_2) + 2*(initial_guess_1 -1)); 
        gradient_y = (200*(initial_guess_2 - initial_guess_1*initial_guess_1)); 

        GoldenSectionSearch(initial_guess_1,initial_guess_2,x_1, x_2, gradient_x, gradient_y, a, a_0, a_1, a_2, b_0, b_1, p,N);  


     } else{ 



       double f_x=(100*(x_2 - x_1*x_1)*(x_2 - x_1*x_1) + (1- x_1)*(1- x_1)); 
       System.out.print("alpha = " + a + " " + "x_1 = " + x_1 + " " + "x_2 = " + x_2 + " " + "f_x = " + f_x); 
     } 



     // Double Boxed_a = new Double(a); 


     return x_2; 

     } 

答えて

0

プリミティブは変更できません。あなたのメソッドに渡すと、Javaがあるかどうか参照渡しそこで質問が上ここにもあります

public static double GoldenSectionSearch(MyWrapperObject obj){ 
     // ... 
     double initial_guess_1 = obj.get_initial_guess_1(); 
     double initial_guess_2 = obj.get_initial_guess_2(); 
     obj.setGradient_x(400*initial_guess_1*(initial_guess_1*initial_guess_1 - initial_guess_2) + 2*(initial_guess_1 -1)); 
     // ... 
    } 

のようにそれを使用するよりも、あなたは

public class MyWrapperObject { 

    private double x_1; 
    private double x_2; 
    private double initial_guess_1; 
    private double initial_guess_2; 
    private double gradient_x; 
    private double gradient_y; 
    private double a; 
    private double a_0; 
    private double a_1; 
    private double a_2; 
    private double b_0; 
    private double b_1; 
    private double p; 
    private double N; 

    public double getX_1() { 
     return x_1; 
    } 

    public void setX_1(double x_1) { 
     this.x_1 = x_1; 
    } 
    /* The rest of getters/setters */ 
} 

ゲッター/セッターでラッパークラスを作成する必要があります値渡しまたは https://stackoverflow.com/a/40523/2022162

関連する問題