初学Java 在看一本清华出版的垃圾教材import java.applet.Applet;
import java.awt.*;
public class Exam 4_10 extends Applet
{
  double Data[]={90.5,50.7,27.8,13.0};
  Color color[]={Color.blue,Color.red,Color.yellow,Color.green};
  int degree[]=new int[4];
  public void init()
  {
     resize(380,150);   /*这里有个小疑问,resize是何物?书上没说,是设置applet的尺寸吗?前面的applet尺寸都是 
                              插入HTML后设置的阿。*/
     double sum=0.0;
     for(int i=0;i<=Data.length;i++)
        sum+=Data[i];
     for(int i=0;i<=Data.length;i++)
        degree[i]=(int)(Data[i]/sum*360+0.5);   /*这里也有疑问,+0.5是何意?+了0.5就能保证360度了?那假如  
                                                         Data[]={98.4,87.2,87.2,87.2}又如何?*/
  }
  public void paint(Graphics g)
  {
     int x0=90,y0=70,r=60,start=0;
     for(int i=0;i<=Data.length;i++)
     {
        g.setColor(color[i]);
        g.fillArc(x0-r,y0-r,2*r,2*r,start,degree[i]);
        start+=degree[i];
      }
  g.setColor(Color.orange);
  g.fillArc(180,50,180,125,30,120);
  }
}

解决方案 »

  1.   

    第一个地方:resize是重新设置大小。
    你可以直接使用编译器运行applet,不一定非得去手动设置html啊。所以这儿就用resize了第二个地方:+0.5,是因为要强制类型转化为int,四舍五入。还有一点:
    for(int i=0;i <=Data.length;i++) 
    这个出现了三次,错了三次。中间的那一条判断应该是i < Data.length,而不是i <= Data.length。否则会出现数组下标越界的异常。我也菜鸟,不知道说的对不对