2010-10-31 46 views
0

我今天想要最小化的最後一件事是包含while和do-while循環的代碼。以下是原文:參考讀/寫操作最小化循環

class Vereinfache3_edit { 

     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 */   c1 += 7 ; 
/* 2 */   System.out.println(c1) ; 

/* 3 */  while (c1 % 8 != 0) 
/* 4 */    if (c1 % 16 == 0) ; 
/* 5 */    else 
/* 6 */   do 
/* 7 */     { 
/* 8 */     c1 += 7 ; 
/* 9 */     System.out.println(c1) ; 
/* 10 */     if (c2 < c3) 
/* 11 */      { c1 = c1+c1 ; 
/* 12 */       c3 ++ ; 
/* 13 */       c1 /= 2 ; 
/* 14 */       c3 -= 1 ; 
/* 15 */      } 
/* 16 */     } 
/* 17 */     while (c1 % 8 != 0) ; 

/* 18 */   c1 += 7 ; 
/* 19 */   System.out.println(c1) ; 
     }   

} // end of class Vereinfache3 

,這裏是我的最小化版本:

class Vereinfache3 { 

     public static void main(String [] args) { 

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

       do{ 
        c1 += 7 ; 
        System.out.println(c1) ;    
       }while (c1 % 8 != 0); 

/* 18 */  c1 += 7 ; 
/* 19 */  System.out.println(c1) ; 
     }   

} // end of class Vereinfache3 

它產生相同的輸出我。你看到任何可以改進的錯誤或事情嗎?

特別是這段代碼似乎是棘手:

/* 3 */  while (c1 % 8 != 0) 
/* 4 */    if (c1 % 16 == 0) ; 
/* 5 */    else 
/* 6 */   do{} 

如何應對,而?什麼包含while循環?

+1

你不會看到我使用c2和c3了......如果你在代碼的後面部分沒有使用它們,你可以刪除這些聲明.. – 2010-10-31 12:15:08

+0

試圖現在解釋一下。 。檢查我的答案。 – 2010-10-31 21:49:04

回答

1

你最小化版本產生相同的結果與原始版本,你原來的解決方案,您的最小化版本的不同僅輸出的情況下是可能的,當c1 % 8 != 0 and c1 % 16 == 0, 這種情況下是不可能的,因爲16的倍數的倍數8了。 。

刪除未使用的聲明..是我可以建議的唯一改進。 我確實有少code..Not的解決方案,它使事情變得更好。我不喜歡在代碼太多sysouts .. :)

int finalBound = ((c1 + 7) % 8 == 0) ? c1 + 7 : 8 * c1; 
    for (; c1 <= finalBound; c1 += 7) { 
     System.out.println(c1 + 7); 
    } 

希望有所幫助。