我想使用线程的概念解决这样一个问题,输出结果如下所示:
1~100的和是:5050

.
.
.
901~1000的和是:95050
1~1000的总和是:
这样一个形式,我写了这样一个程序,麻烦高手改正一下,有好多错误,谢谢!!class SumThread extends Thread{
int from,to;
long sum;
SumThread(int from,int to){
this.from=from;
this.to=to;
}
long getSum(){
return Sum;
}
public void run(){
for(int i=from;i<=to;i++)
sum+=i;
}
}
public class Thread10{
public static void main(String [] args){
SumThread st1=new SumThread(1,100);
SumThread st2=new SumThread(101,200);
SumThread st3=new SumThread(201,300);
SumThread st4=new SumThread(301,400);
SumThread st5=new SumThread(401,500);
SumThread st6=new SumThread(501,600);
SumThread st7=new SumThread(601,700);
SumThread st8=new SumThread(701,800);
SumThread st9=new SumThread(801,900);
SumThread st10=new SumThread(901,1000);
}
st1.start();
st2.start();
st3.start();
st4.start();
st5.start();
st6.start();
st7.start();
st8.start();
st9.start();
st10.start();
    try{
st1.join();
st2.join();
st3.join();
st4.join();
st5.join();
st6.join();
st7.join();
st8.join();
st9.join();
st10.join();
}catch(InterruptedException ie){ }
for(int i=1;i<=10;i++)
System.out.println(from+"~"+to+"的和是:"+getSum());
long Sum=st1.getSum()+st2.getSum()+st3.getSum()+s4t.getSum()+st5.getSum()+st6.getSum()+st7.getSum()+st8.getSum()+st9.getSum()+st10.getSum();
System.out.println("1~1000的总和是:"+Sum);
}

解决方案 »

  1.   

    ○_○!!!大小写先要注意下,然后
    System.out.println(from+"~"+to+"的和是:"+getSum());
    这句完全...
      

  2.   

    long getSum(){
    return Sum;
    }
    这句中的return Sum 应当是小写的sum
      

  3.   

    class SumThread extends Thread{
        int from,to;
        long sum;
        SumThread(int from,int to){
            this.from=from;
            this.to=to;
        }
        long getSum(){
            return sum;
        }
        public void run(){
            for(int i=from;i<=to;i++)
            sum+=i;
        }
    }
    public class temp{
        public static void main(String [] args){
            SumThread st1=new SumThread(1,100);
            SumThread st2=new SumThread(101,200);
            SumThread st3=new SumThread(201,300);
            SumThread st4=new SumThread(301,400);
            SumThread st5=new SumThread(401,500);
            SumThread st6=new SumThread(501,600);
            SumThread st7=new SumThread(601,700);
            SumThread st8=new SumThread(701,800);
            SumThread st9=new SumThread(801,900);
            SumThread st10=new SumThread(901,1000);
            st1.start();
            st2.start();
            st3.start();
            st4.start();
            st5.start();
            st6.start();
            st7.start();
            st8.start();
            st9.start();
            st10.start();
            try{
                st1.join();
                st2.join();
                st3.join();
                st4.join();
                st5.join();
                st6.join();
                st7.join();
                st8.join();
                st9.join();
                st10.join();
            }catch(InterruptedException ie){ }
            long sum;
            System.out.println(st1.from+"~"+st1.to+"的和是:"+st1.getSum());
            System.out.println(st2.from+"~"+st2.to+"的和是:"+st2.getSum());
            System.out.println(st3.from+"~"+st3.to+"的和是:"+st3.getSum());
            System.out.println(st4.from+"~"+st4.to+"的和是:"+st4.getSum());
            System.out.println(st5.from+"~"+st5.to+"的和是:"+st5.getSum());
            System.out.println(st6.from+"~"+st6.to+"的和是:"+st6.getSum());
            System.out.println(st7.from+"~"+st7.to+"的和是:"+st7.getSum());
            System.out.println(st8.from+"~"+st8.to+"的和是:"+st8.getSum());
            System.out.println(st9.from+"~"+st9.to+"的和是:"+st9.getSum());
            System.out.println(st10.from+"~"+st10.to+"的和是:"+st10.getSum());
            sum=st1.getSum()+st2.getSum()+st3.getSum()+st4.getSum()+st5.getSum()+st6.getSum()+st7.getSum()+st8.getSum()+st9.getSum()+st10.getSum();
            System.out.println("1~1000的总和是:"+sum);
        }
    }
      

  4.   

    SumThread类不用重写
    Thread10类改成如下
    public class Thread10{
         public static void main(String [] args){
    SumThread[] st=new SumThread[10];
    long sum=0;
    for(int i=0;i<10;i++){
    st[i]=new SumThread(i*100+1,(i+1)*100);
    st[i].start();
    }
    try{
    for(int i=0;i<10;i++)
         st[i].join();
    }
    catch(Exception e){
    System.out.println(e);
    }
    for(int i=0;i<10;i++){
                   System.out.println(st[i].from+"-"+st[i].to+"的和为:"+st[i].getSum());
          sum=sum+st[i].getSum();
    }

    System.out.println("1~1000的总和是:"+sum);
         }
    }
      

  5.   

    谢谢大家的建议,但是编译前一个的程序的提示错误有如下:
    E:\Java\program\Thread10.java:3: 找不到符号
    符号: 类 SumThread
    位置: 类 Thread10
        SumThread[] st=new SumThread[10];
        ^
    E:\Java\program\Thread10.java:3: 找不到符号
    符号: 类 SumThread
    位置: 类 Thread10
        SumThread[] st=new SumThread[10];
                           ^
    E:\Java\program\Thread10.java:6: 找不到符号
    符号: 类 SumThread
    位置: 类 Thread10
            st[i]=new SumThread(i*100+1,(i+1)*100);
                      ^
    E:\Java\program\Thread10.java:18: 运算符 + 不能应用于 long,SumThread.getSum
              sum=sum+st[i].getSum();
                  ^
    E:\Java\program\Thread10.java:18: 不兼容的类型
    找到: <nulltype>
    需要: long
              sum=sum+st[i].getSum();
                     ^
    5 错误Process completed.
      

  6.   

    我修改了一下,编译没有问题了,但是运行的时候出现这样的问题了:
    public class SumThread extends Thread{
    int from,to;
        long sum=0;
        SumThread(int from,int to){
            this.from=from;
            this.to=to;
           }
        long getSum(){
              return sum;
              }
        public static void main(String [] args){
    SumThread[] st=new SumThread[10];
    for(int i=0;i<10;i++){
    st[i]=new SumThread(i*100+1,(i+1)*100);
    st[i].start();
    }
    try{
    for(int i=0;i<10;i++)
         st[i].join();
    }
    catch(Exception e){
    System.out.println(e);
    }
    for(int i=0;i<10;i++){
              System.out.println(st[i].from+"-"+st[i].to+"的和为:"+st[i].getSum());
          sum=sum+st[i].getSum();
    }

    System.out.println("1~1000的总和是:"+sum);
         }
    }--------------------Configuration: <Default>--------------------
    E:\Java\program\SumThread.java:28: 无法从静态上下文中引用非静态 变量 sum
              sum=sum+st[i].getSum();
              ^
    E:\Java\program\SumThread.java:28: 无法从静态上下文中引用非静态 变量 sum
              sum=sum+st[i].getSum();
                  ^
    E:\Java\program\SumThread.java:31: 无法从静态上下文中引用非静态 变量 sum
        System.out.println("1~1000的总和是:"+sum);
                                         ^
    3 错误Process completed.
    --------------------Configuration: <Default>--------------------
    1-100的和为:0
    101-200的和为:0
    201-300的和为:0
    301-400的和为:0
    401-500的和为:0
    501-600的和为:0
    601-700的和为:0
    701-800的和为:0
    801-900的和为:0
    901-1000的和为:0
    1~1000的总和是:0Process completed.
    请高手指点!
      

  7.   

    sum变量:在你的类的定义中为非静态变量,对于非静态变量在引用的时候必须有实例才能引用,
    例如 类class A{ int a;},当你要引用变量a的时候必须有一个类A的实例,即需要如下的代码
        A aObject=new A();aObject.a=10;这样才能引用变量a,
    在你的程序中的sum=sum+st[i].getSum();代码中,对于JAVA虚拟机来讲,他并不认为sum变量是某一实例的成员变量,所以虚拟机会把sum变量认为是一个静态变量(因为静态变量在使用时不需要类的实例),而在你的程序中又找不到静态变量sum所有报错以上是出错的原因,下面说一下解决的方法
    出错位置的sum变量是要计算所有值得和并将其输出,所以你可以在main方法中定义一个变量
    int sum=0;(注意:sum是main方法的局部变量,所以一定要显示初始化)说明一下最好是将sum该城其他的名字已便于区别,定义成sum应该是可以的我没有试过,你试试
      

  8.   

    你的代码确实有不少问题,我建议你先把JAVA的基础知识先清楚,其实我的基础也不好,大家共勉吧,下面我给你改正以后的代码,我在我的机器上测试过了。
      
      
    class SumThread extends Thread{
      int from, to;
      long sum;
      SumThread(int from, int to) {
        this.from = from;
        this.to = to;
      }long getSum(){
    return sum;
    }
    public void run(){
    for(int i=from;i<=to;i++)
    sum+=i;
    }
    public static void main(String [] args){
    SumThread st1=new SumThread(1,100);
    SumThread st2=new SumThread(101,200);
    SumThread st3=new SumThread(201,300);
    SumThread st4=new SumThread(301,400);
    SumThread st5=new SumThread(401,500);
    SumThread st6=new SumThread(501,600);
    SumThread st7=new SumThread(601,700);
    SumThread st8=new SumThread(701,800);
    SumThread st9=new SumThread(801,900);
    SumThread st10=new SumThread(901,1000);st1.start();
    st2.start();
    st3.start();
    st4.start();
    st5.start();
    st6.start();
    st7.start();
    st8.start();
    st9.start();
    st10.start();
        try{
    st1.join();
    st2.join();
    st3.join();
    st4.join();
    st5.join();
    st6.join();
    st7.join();
    st8.join();
    st9.join();
    st10.join();
    }catch(InterruptedException ie){ }
        System.out.println(st1.from+"~"+st1.to+"的和是:"+st1.getSum());
        System.out.println(st2.from+"~"+st2.to+"的和是:"+st2.getSum());
        System.out.println(st3.from+"~"+st3.to+"的和是:"+st3.getSum());
        System.out.println(st4.from+"~"+st4.to+"的和是:"+st4.getSum());
        System.out.println(st5.from+"~"+st5.to+"的和是:"+st5.getSum());
        System.out.println(st6.from+"~"+st6.to+"的和是:"+st6.getSum());
        System.out.println(st7.from+"~"+st7.to+"的和是:"+st7.getSum());
        System.out.println(st8.from+"~"+st8.to+"的和是:"+st8.getSum());
        System.out.println(st9.from+"~"+st9.to+"的和是:"+st9.getSum());
        System.out.println(st10.from+"~"+st10.to+"的和是:"+st10.getSum());
     long sum=st1.getSum()+st2.getSum()+st3.getSum()+st4.getSum()+st5.getSum()+st6.getSum()+st7.getSum()+st8.getSum()+st9.getSum()+st10.getSum();
        System.out.println("1~1000的总和是:"+sum);
    }
    }