public class B {
   int n;
   static int sum=0;
   void setN(int n){
   this.n=n;
   }
   int getSum(){
   for(int i=1;i<=n;i++){
   sum=sum+i;
   }
   return sum;
   }
}public class A {
   public static void main(String args[]){
   B b1=new B();
   B b2=new B();
   b1.setN(3);
   b2.setN(5);
   int s1=b1.getSum();  
   int s2=b2.getSum();
   System.out.println(s1+s2);
   }
}
运行后输出为27,我想问为什么不是45呢?
我的想法是这样的:第一次b1.getSum();这里执行后sum的值是6,那么执行b2.getSum();
这里的时候sum=6;然后做循环的话就应当相当于
int sum=6;
for(int i=1;i<=5;i++){
    sum=sum+i;
 }
这样的话结果就应该是45了。

解决方案 »

  1.   

    b1.setN(3);/*sum依次为1,3,6*/
    b2.setN(5);/*sum依次为7,9,12,16,21*/
    你算错了
      

  2.   

    int sum=6;
    for(int i=1;i<=5;i++){
      sum=sum+i;  
     }
    6+1+2+3+4+5 = 21    b2.getSum() ==21  b1.getSum() = 6 --> 27 ;正确啊 
      

  3.   

    public class A {
      public static void main(String args[]){
    B b1=new B();
    B b2=new B();
    b1.setN(3); 
    b2.setN(5);
    int s1=b1.getSum();   //s1  = 6  ,此时 sum =6  
    int s2=b2.getSum();   // s2 = sum  +1 + 2 + 3 + 4 + 5 = 6+  +1 + 2 + 3 + 4 + 5 = 21 此时 sum = 21System.out.println(s1+s2);  //  27
      }
    }
      

  4.   

    这个论坛有问题了,我怎么回复都回复不上
    眼睁睁的看着楼层在增加,为什么csdn总是有漏洞啊
    ,呵呵,我们该换论坛
      

  5.   

    这样子   不对 看我的  
    static  new的时候 sum从新变回了0
    所以s1  和 s2  开始的时候是一样的都是从sum=0开始
    s1。get=1+2+3=6
    s2.get=1+2+3+4+5=21
    固  ————》》》 6+21=27
      楼主,明白?
      

  6.   

    我也对static不是太懂,但这个看懂了
      

  7.   

    static 静态变量,在编译时就分配内存了,所以2个类操作的都是同一个内存地址!数学没学好,搞编程也老火啊
      

  8.   

      static new的时候 sum从新变回了0
    所以s1 和 s2 开始的时候是一样的都是从sum=0开始
      

  9.   

    static   类型  不是只能初始化一次么  
    第二次怎么变成了  6 啊???????
    甚是不解??????????????????????????