我想使用线程的概念解决这样一个问题,输出结果如下所示:
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~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);
}
System.out.println(from+"~"+to+"的和是:"+getSum());
这句完全...
return Sum;
}
这句中的return Sum 应当是小写的sum
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);
}
}
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);
}
}
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.
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.
请高手指点!
例如 类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应该是可以的我没有试过,你试试
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);
}
}