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 ループには何が含まれていますか?

4

1 に答える 1

1

最小化されたバージョンは元のバージョンと同じ結果を生成し、元のソリューションに対して異なる出力が可能であり、最小化されたバージョンは次の場合にのみ可能 c1 % 8 != 0 and c1 % 16 == 0です。16の倍数はすべて8の倍数であるため、この場合は不可能です。

未使用の宣言を削除することは、私が提案できる唯一の改善です。私はより少ないコードで解決策を持っています..それが物事をより良くするというわけではありません...私はコード内のあまりにも多くのsysoutが好きではありません..:)

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

お役に立てば幸いです。

于 2010-10-31T12:36:26.697 に答える