人生のプチ美学を教えてください!!

import java.applet.Applet;
import java.awt.*;

public class graph extends Applet{
public void paint(Graphics g){
int pa[] = new int[5];
int i,count;

pa[0]=-72;
pa[1]=-72;
pa[2]=-72;
pa[3]=-72;
pa[4]=-72;

count=5;

int k=0;
if(pa[k]<0){
pa[k]=0;
}

int t,sum=0;
for(t=0;t<count;t++){
sum=sum+pa[t];
}

int u,s=0;
for(i=0;i<5;i++){
for(u=0;u<i;u++){
s=s+360*pa[i-1]/sum; //
}
g.setColor(new Color(200,50,200));
g.fillArc(100, 100, 300, 300, 90+s,pa[i]/sum*360);
}


}
}

実行しても真っ白のままなにも描かれていません。
count=1にしてpa[0]の部分だけを描こうとしても無理でした。
直接-72と入れるとちゃんと描かれていました。
どうしてでしょうか?

A 回答 (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);
    • good
    • 1
この回答へのお礼

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

お礼日時:2011/05/07 21:32

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()の次の行に書くべきでしょう。
    • good
    • 0

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になってしまいます。
    • good
    • 0
この回答へのお礼

返答ありがとうございます。

int k=0;
if(pa[k]<0){
pa[k]=0;
}

i=0のときの例外のために書いたと思われますが、改めて見るとおかしいですね(笑
pa[-1]の例外は普通にpa[-1]=0で大丈夫ですか?

pa[i]の割り算のところは、よくわかりません。
割り算したときに、あまりは切り捨てられることといっしょですか?
インターネットで(double)をつけるといいらしいのですが、つける場所がイマイチわかりません。

お礼日時:2011/05/07 19:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報