• 締切済み

このソースコードの意味が分かりません

「次の演算を記載順に処理し、演算の結果を出力するプログラムを作成しなさい。ただし、出力は10^-7までとする。プログラムは複数のクラスを定義して作成すること。1-1/2+1/3-1/4+・・・・・+1/9999-1/10000」という問題です。 import java.math.BigDecimal; class Sample{ public static double a(){ double sum=0; for(int i=1;i<=10000; i++){ double div=(double)i; if(i%2==0){ div*=(-1); } sum+=1/div; } return sum; } } class Sample17{ public static void main(String args[]){ System.out.print(ensyu.a()+""); BigDecimal bi = new BigDecimal(String.value0f(ensyu.a())); double sum0 = bi.setScale(7.BigDecimal.ROUND_HALF_UP).doubleValue(); System.out.println(+sum0); } } 学校の先生に何回も質問しにいってようやく実行できるソースコードは分かったのですが どういう処理をしているのかがよく理解できません。理解できないところを細かく書こうともした のですがそれさえも分からない状態です。 どうか皆様の力をお貸し下さい。よろしくお願いします。

みんなの回答

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.1

どこが判らないのか判らないから、  double sum=0; // double型の変数sumを宣言して、0に初期化している。  for(int i=1;i<=10000; i++){ // int型の変数iを宣言して、int型の数1~10000まで代入しループに入る。   double div=(double)i; // double型の変数divを宣言して、int型の変数iの値をdouble型にキャストして代入している。   if(i%2==0){ // iを2で割った余りが0かどうかを判定している。 // 要するに、iが偶数かどうかを判定している。    div*=(-1); // iが偶数だったら、divの値(double型にキャストされたiの値)に-1を掛けて負の値にしている。   }   sum+=1/div; // 最初に宣言しておいたsumにdivの値の逆数を加えている。  } これで、 1は奇数なのでそのままで、1の逆数は1 2は偶数なので-1を掛けて、その逆数は-1/2 3は奇数なのでそのままで、3の逆数は1/3 4は偶数なので-1を掛けて、その逆数は-1/4 … を加算していくと 1-1/2+1/3-1/4+・・・・・ が計算される。 ※前半部分が理解できないのはかなり致命的。 ※後半部分は、計算結果を出力しているだけ。 ※教科書の最初から読み直そう。