2017-11-01 11 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

프리미티브를 수정할 수 없습니다. 당신은 게터/세터와 래퍼 클래스를 만들 필요가 자바인지 그래서 질문에도 여기에있다

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