みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

「次の演算を記載順に処理し、演算の結果を出力するプログラムを作成しなさい。ただし、出力は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);
}
}

学校の先生に何回も質問しにいってようやく実行できるソースコードは分かったのですが
どういう処理をしているのかがよく理解できません。理解できないところを細かく書こうともした
のですがそれさえも分からない状態です。
どうか皆様の力をお貸し下さい。よろしくお願いします。

投稿日時 - 2011-06-04 15:34:13

QNo.6785732

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.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+・・・・・
が計算される。



※前半部分が理解できないのはかなり致命的。
※後半部分は、計算結果を出力しているだけ。
※教科書の最初から読み直そう。

投稿日時 - 2011-06-04 18:34:57