• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javaの円グラフがうまくいきません。)

Javaの円グラフが描かれない理由

このQ&Aのポイント
  • Javaの円グラフが描かれない理由について説明します。
  • プログラムの中で指定されているパラメーターの値が原因で円グラフが描かれない場合があります。
  • 具体的には、paの各要素が-72で初期化されているため、描画されない問題が発生しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.3

> pa[i]の割り算のところは、よくわかりません。 pa[i]=-72, sum=-360だとして、pa[i]/sum*360の計算を順番に考えてみましょう。 先に計算される部分にカッコをつけると(-72/-360)*360となりますが、カッコの中の割り算はこの場合整数演算なので結果は0です。0.2にはなりません。したがって、0*360=0となります。 > インターネットで(double)をつけるといいらしいのですが、つける場所がイマイチわかりません。 上の式でpa[i]とsumのどちらかをdoubleにキャストしてやれば、割り算の結果が0ではなく0.2になります。  整数 / 整数 → 整数  浮動小数点数 / 整数 → 浮動小数点数  整数 / 浮動小数点数 → 浮動小数点数  浮動小数点数 / 浮動小数点数 → 浮動小数点数 ただし、fillArc()は第6引数に浮動小数点数を受け付けないので、360を掛けた後にもう一度intにキャストする必要があります。 分解して書いてみます。yがfillArc()に渡す角度です。 double x = (double)pa[i]/sum; int y = (int)(x*360);

noname#132976
質問者

お礼

ありがとうございます。なんとか完成させることができますた。 pa[-1]の場合もif文で何とかできました。 本当に助かりました。

その他の回答 (2)

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.2

ANo.1で「i=0のときにpa[i-1]を参照したら例外が発生します。」と書いたのは的外れだったので訂正します。i=0のときにはs=s+360*pa[i-1]/sum;は実行されません。 ただしiが1以上の時の開始角指定が正しくないので、for (u = 0; u < i; u++) { … }のループは消して、代わりにs=s+360*pa[i]/sum;をfillArc()の次の行に書くべきでしょう。

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

int k=0; if(pa[k]<0){ pa[k]=0; } の部分の意図は何ですか? kは変化せず、またpa[0]=-72;で代入した値が0に変えられてしまいます。pa[0]の値を0にしたいのなら最初からpa[0]=0;とすればいいのでは? for(i=0;i<5;i++){ for(u=0;u<i;u++){ s=s+360*pa[i-1]/sum; // } i=0のときにpa[i-1]を参照したら例外が発生します。 g.fillArc(100, 100, 300, 300, 90+s,pa[i]/sum*360); pa[i]の型はintなので、先にsumで割ると0になってしまいます。

noname#132976
質問者

お礼

返答ありがとうございます。 int k=0; if(pa[k]<0){ pa[k]=0; } i=0のときの例外のために書いたと思われますが、改めて見るとおかしいですね(笑 pa[-1]の例外は普通にpa[-1]=0で大丈夫ですか? pa[i]の割り算のところは、よくわかりません。 割り算したときに、あまりは切り捨てられることといっしょですか? インターネットで(double)をつけるといいらしいのですが、つける場所がイマイチわかりません。

関連するQ&A