2016-10-03 9 views
0

私はちょっと困惑しています。私は宿題の質問に取り組んでいます。あなたはe^xを一連の30回の反復で見つける必要があります:1 + x + x^2/2! ... x^n/n!。この場合、n = 30となり、xの範囲は-3〜3となります。しかし、Javaで実行しようとすると、私は困惑していると感じています。Java(指数系列)の指数を計算するのに悩む

考えは2つのforループを実行することでした。 xの反復の外側ループとnの反復の内側ループ。これまでのコードは次のとおりです。

double series = 1.0; 

for (int x=-3; x<=3; x++) 
{ 
    for (int n=1; n<=x+30; n++) 
     { 
      series = series + (x^n)/n; 
      n*=n; 
     } 
    System.out.println(""+ x +"\t "+ (series+1)); 
} 

アドバイスをいただければ幸いです。

+5

^JavaではXORです。 Math.pow()を使用してください – Eran

+0

"yの力にJava x"のためのGoogle検索を実行し、答えをお読みください。 – DwB

答えて

0

あなたはこのようなMATH.POWを使用して式を書くことができます:

for (int x=-3; x<=3; x++) 
    { 
     for (int n=1; n<=x+30; n++) 
      { 
       series = series + (Math.pow(x,n)/n); 
       n*=n; 
      } 
     System.out.println(""+ x +"\t "+ (series+1)); 
    } 
1

あなたはもっと自分のコードを確認するために、ループ内のすべての単一の変数と値の変化にもっと注意を払う必要がある場合があります。

あなたは、いくつかのミス行っている:

  • は、それ自体にNを掛けた後、同様のnで割りました。あなたの公式によれば、nFactorialではなくnで番号を付ける必要があります。さらに、nFactorialは、格納する(そして正確な結果を得る)ために、nで割ってすべてのステップでxを乗算する利点を活用することができます(下記参照)。
  • また、XOR演算子も使用しました。代わりに、Math.pow()メソッドを使用します。
  • 各内側ループ開始で系列値を初期化する必要があります。
  • 初期値1で開始した場合は、最後に(シリーズ+1)を印刷する必要はありません。 0に初期化したり、印刷物の+1を削除する方が良い。

次のコードは、目的をより良く解決します。

double series = 1.0; 
    double term = 1.0; 

    for (int x = -3; x <= 3; x++) { 
     series = 1.0; 
     term = 1.0; 
     for (int n = 1; n <= 30; n++) { 
      term = (term * x/n); 
      series += term; 
     } 
     System.out.println("" + x + "\t " + (series)); 

    } 
+0

ありがとうございました。これは私の最初のJavaプログラムであり、私はフィードバックに非常に感謝しています! – James

+0

@Jamesようこそ。フィードバックが役立つことを願っています。これがあなたの質問に答えるなら、これを答えとして受け入れることができます。 –

関連する問題