質問

死んだコードを見つけて削除する方法を練習しています。次のコードがあります。

              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 ) ; 
        }     

このコードに関する私の反対:最初にIFステートメントを削除できます。これは、コードの残りの部分の実行に影響を与えないためです。 C1%16に加えて、C1%8と同じです。

ループを処理するにはどうすればよいですか?

役に立ちましたか?

解決

私はループの内側のコードから始めます:たとえば、あなたが持っている場合、内側の内側

c1 = c1+c1 ; 
c3 ++ ; 
c1 /= 2 ; 
c3 -= 1 ; 

1行目と3行目は互いにキャンセルし、2番目と4番目の行と同じです。このように内側を削除する:

if ( c2 < c3 )
{
}

これを排除することができます(C2、C3 VARの必要性も削除します)したがって、囲まれたステートメントは次のようになります。

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

ステップアップして囲いを逆にした場合、/そうでない場合は次のようなものが得られます。

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

そして、空の他のものを削除することができます。今、あなたが別のステップを上げればあなたは得る:

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

上記の間に既にチェックインされているので、完全に削除します。今、あなたが取得する完全なコードを書くならば、

c1 += 7 ; 
System.out.println( c1 ) ; 

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

c1 += 7 ; 
System.out.println( c1 ) ; 

最初のdoループには同じセマンティクスがあるため、最初と初期の追加/印刷を完全に削除できます。

最終的には、次のようなものを取得する必要があります。

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

    c1 += 7;
    System.out.println(c1);

また、中間値を実際に印刷する必要がない場合は、単純な数学を介して1-2ステップで最終C1値を取得できます:-)。

他のヒント

C%16はC%8と同じではありません。 Cが24に等しい場合、前者は8を返し、後者0を返します。Cが32の場合、両方とも0ですが、Cの場合、前者は再び8、後者は0に戻ります。

行4/5/6は最適ではありません。実際に起こっているのは、C1%16!= 0の場合、do/while loopを実行しますが、それが書かれている方法はクロジーです。裸のものを使用して、「C1%16 == 0の場合は何もしないでください」と書かれています。 ifの後。次のようなことをすることで、より読みやすくします。

bool shouldDoLoop = c1 % 16 != 0;
if (shouldDoLoop) {
   // do/while here
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top