2010-10-31 69 views
1

我正面临一个奇怪的问题。插入变量以最小化代码

if (c2==c1){ 
    c3 *= 2 ; 
    System.out.println(c3) ; 
    ..... 
} 

我想在println语句中插入c3 * 2。但是

if (c2==c1){ 
    System.out.println(c3*2) ; 

给了我不同的结果。

这里是整个代码:

 public static void main(String [] args) { 

      int c1 = Integer.parseInt(args[0]) ; 
      int c2 = Integer.parseInt(args[1]) ; 
      int c3 = Integer.parseInt(args[2]) ; 

/* 1 */  if (c1 != c3){ 
/* 2 */  if (c2==c1){ 
/* 3 */    
/* 4 */    System.out.println(c3 + c2) ; 
/* 5 */    c3 *= c2 ; 
/* 6 */  } 

/* 7 */  }else{ 
/* 8 */  if (c2==c1){ 
/* 9 */     c3 *= 2 ; 
/* 10 */     System.out.println(c3) ; 
/* 11 */     c3 *= c2 ; 
/* 12 */   if (c1 < c2) c2 += 7 ; 
/* 13 */     else c2 += 5 ; 
/* 14 */    }} 

/* 15 */  System.out.println(c1+c2+c3) ;  
     }   
     ..... 
    } 

任何想法?

+0

你能不能先离开的变量声明?它给你什么结果? – lbedogni 2010-10-31 09:08:22

+3

这里是一样的。你没有展示一切。 – Bozho 2010-10-31 09:08:45

+2

*什么*不同的结果,不同于*什么?*你甚至没有发布c3的声明。请澄清你的问题。 – EJP 2010-10-31 09:10:57

回答

1

如果你这样做c3 *= 2;它会改变的c3值将从最后一行System.out.println(c1+c2+c3);打印不同的值。所以你需要遵循你的程序的逻辑。

7
c3 *= 2; 
System.out.println(c3) ; 

将打印同样的事情:

System.out.println(c3 * 2) ; 

,但关键的区别在于,在第一种情况下c3变量的值将在第二它被修改(乘以2),而将保持不变。

3

这可能取决于你的变量的类型来获得不同的结果 - 还记得*=(也++--等)铸结果相同类型c3。例如:

byte b = 100; 
System.out.println(b*2); // 200 
b*=2; 
System.out.println(b); // -56 

例子:http://ideone.com/ojKfA

1

如果你想在同一时间修改变量,并打印出来,你可以做这样的:

System.out.println(c3 *= 2);