2012-03-06 4 views
0

何をしようとしているのは、最初の数字セットを実行するプログラムを持つことです。次に、出力を「X」として使用します。だからこのように見える Tnew = Told - m(Told - Tair) Toldは最後の方程式Tnewです。Javaプログラムの再帰で最後の数字を繰り返す必要があります

ex. new = old +6 
old = 7 
new = 13 
new = 13 +6 
repeat 

Heres the code;パッケージヒートロス; パッケージheatloss;

/** 
* 
* @author Eric Franzen 
*/ 
public class HeatLoss { 

    public static void heatloss(double x, double m, double a) { 
     double heatloss = x - m * (x - a); 

     if (x < 55) { 
      System.out.println("potatoe too cold"); 
     } 
     else { 

      System.out.println(heatloss); 
      heatloss(x,m,a); 
      x = heatloss; 
     } 
    } 


    public static void main(String[] args) { 

     heatloss(80, .01515 ,25); 

    } 

}

わかりましたので、私はこのように見えるようにコードを変更:

public static double heatloss(double x, double m, double a) { 
    double heatloss = x - m * (x - a); 

    if (x < 55) { 
     System.out.println("potatoe too cold"); 
     return heatloss; 
    } 
    else { 
     System.out.println(heatloss); 
     x = heatloss(x,m,a); 
     return heatloss; 
    } 
} 

しかし、私は割り当てられた値である」という行

x = heatloss(x,m,a); 

でエラーが出ます使われたことがない。" それはどういう意味ですか? Xはプログラムではっきりと使用されています。

+0

質問がありましたか? –

答えて

2

再帰的メソッドを1回呼び出して別のデータ(たとえばローカル変数に格納されているデータ)にアクセスするには、そのデータを2番目の再帰呼び出しから最初の呼び出しに何らかの形で伝達する必要があります。この場合、heatlossメソッドがheatlossローカル変数の値を返すことを検討することをお勧めします。例:適切な空白(私はあなたが解決している特定の問題に精通していないよので、私は、あなたがここにそれを行うだろうかどうかはわかりません)に充填することにより

public static double heatloss(double x, double m, double a) { 
    double heatloss = x - m * (x - a); 

    if (x < 55) { 
     System.out.println("potatoe too cold"); 
     return /* put something here */ 
    } 
    else { 
     System.out.println(heatloss); 
     x = heatloss(x,m,a); 
     return /* put something here */ 
    } 
} 

、あなたはできるはずですより深いコールの情報をより高いコールに伝達することができます。

希望すると便利です。

+0

私はあなたの推薦する方法にコードを調整しました。私はどのように修正するか分からない、異なるエラーを得ました。私はそれを上に掲示した。 – enrique2334

0
/** 
* 
* @author Eric Franzen 
*/ 
public class HeatLoss { 

    public static void heatloss(double x, double m, double a) { 
     double heatloss = x - m * (x - a); 

     if (x < 55) { 
      System.out.println("potatoe too cold"); 
     } 
     else { 

      System.out.println(heatloss); 
      x = heatloss; 
      heatloss(x,m,a); 
     } 
    } 


    public static void main(String[] args) { 

     heatloss(80, .01515 ,25); 

    } 
} 
+0

あなたのプログラムでは、xの古い値でヒートロスが呼び出されています.I else else節の2つのステートメントを入れ替えました。 – Teja

0
 heatloss(x,m,a); 
     x = heatloss; 

あなたはheatloss方法とheatloss変数が何らかの形で関連していることを信じるのミスを作っています。彼らはまったく無関係です。 heatlossメソッドがその値を返すときは、返された値を何かに代入する必要があります(実際に値を使用する場合)。

あなたはプログラムを実行する際に起こる操作を鉛筆と紙で「コンピュータを使う」べきである。これにより、何が起こっているのかをよりよく理解できます。それは魔法ではなく、単純な "命令的"言語であり、各ステップで以前の(時間的に)発生したことの結果を使用します。

関連する問題