题目:将自己的学号加100,例如学号为5,则值为105。对所加得的值,求所有的素数之和。
要求:
   1、用图形界面
   2、在图形界面上打印出所有的素数
   3、用一个文本框显示所有的素数和
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class zhang extends Applet implements ActionListener
{
   Label result;
   TextField input;
   Button btn;
   int n=0;   public void init()
  {
   result=new Label("请输入你的学号加100的值:");
   input=new TextField(10);
   btn=new Button("计算");
   add(result);
   add(input);
   add(btn);
   btn.addActionListener(this);
   }public void actionPerformed(ActionEvent e)
{
  n=Integer.parseInt(input.getText());
  int k=1;
  boolean zw;
  for (int j=2;j<n;j++)
   {
     zw=true;
     for(int i=2;i<j;i++)
     {
       if((j%i)==0)
      {
        zw=false;
        break;
      }
       k+=j;
    }
  }
 result.setText("所有素数之和为:"+k);
}
}

解决方案 »

  1.   

    for(int i=2;i<j;i++)
         {
           if((j%i)==0)
          {
            zw=false;
            break;
          }
           k+=j;
        }
    有问题 假如此时j = 9, i = 2, 是不是要执行 k+=j 呀
      

  2.   

    actionPerformed方法错了
    改为
    public void actionPerformed(ActionEvent e)
    {
    n=Integer.parseInt(input.getText());
    int k=2;
    flag:for(int i=3;i<=n;i+=2)
    {
    for(int j=2;j<=Math.sqrt(i);j++)
    {
    if(i%j==0)
    continue flag;

    }

    k+=i;
    }
    result.setText("所有素数之和为:"+k);
    }
      

  3.   

    多谢楼上大哥知道,谢谢了!!!
    昨晚上我想了好久已经弄好了,现在我发出来,请高手帮我分析一下哪里还需要进步的地方。import java.applet.*;
    import java.awt.*;
    import java.awt.event.*;public class fuhao extends Applet implements ActionListener
    {
    Label result;
    TextField input;
    Button btn;
    int n=0,k=0;
    int a[]=new int[100];
    public void init()
    {
       result=new Label("请输入你的学号加100后的值:");
       btn=new Button("计算");
       input=new TextField(5);
       add(result);
       add(input);
       add(btn);
       btn.addActionListener(this);
    }
    public void actionPerformed(ActionEvent e)
    {
      n=Integer.parseInt(input.getText());
      int b=1;
        boolean issh;
        for (int j=3;j<=n;j++)
        {
          issh=true;
          for(int i=2;i<j;i++)
          {
            if((j%i)==0)
             {
               issh=false;
               break;
             }
          }
          if(issh==true)
          a[k++]=j;
        }
        for(int m=0;m<k;m++)
        b+=a[m];
        result.setText("素数之和为:"+b);
    }
    public void paint(Graphics g){
            
           
        g.drawString("所有素数为:",250,200 );
        for(int i=0;i<k;i++)
            g.drawString(Integer.toString(a[i]),300,210+i*10);
       }
    }
      

  4.   

    boolean issh;
        for (int j=3;j<=n;j++)
        {
    要改改不然太慢了
    j++改为
    j+=2
    这样大于3的所有偶数都可以跳过去了。
      

  5.   

    紧接着
     for(int i=2;i<j;i++)
          {
    也要改
    因为我们跳过了所有的偶数
    i可以从3开始
    i++同样也要该为 i+=2
    我估计改这两个地方应该可以提高4倍以上的速度
    你找个大点的数试试吧,别忘了把结果告诉我啊
      

  6.   

    刚刚看到
       if(issh==true)
          a[k++]=j;
        }
        for(int m=0;m<k;m++)
        b+=a[m];
    是否有些画蛇添足?
    原来的
         类似 k+=j;的方法怎么拉?

    k+=i;
      

  7.   

    多谢,多谢!!
    刚才我跟我同学正在讨论这个程序,就是在运行的时候打印所有素数的时候速度太慢了。
    进来正好看到老兄的指点,谢谢了,程序速度提高了很多。
    特此感谢windcao(风间草)。不过我这道题最多奖励20分。
    我给你15分吧,还是谢谢你了。
    真得很感谢。