Pergunta

A última coisa que quero minimizar hoje é o código que contém loops enquanto e faça o que faz. Aqui está o original:

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

E aqui está minha versão minimizada:

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

Ele gera a mesma saída para mim. Você vê algum erro ou coisas que possam ser melhoradas?

Especialmente esse código parece ser complicado:

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

Como faço para lidar com o tempo? O que contém o loop while?

Foi útil?

Solução

Sua versão minimizada produz o mesmo resultado da versão original, saídas diferentes para sua solução original e sua versão minimizada são possíveis apenas no caso quando c1 % 8 != 0 and c1 % 16 == 0, este caso é impossível, pois todos os múltiplos de 16 são múltiplos 8 também ..

Remover as declarações não utilizadas ... é a única melhoria que eu poderia sugerir. Eu tenho uma solução com menos código ... não que isso torne as coisas melhor ... eu não gosto de muitos sistemas no código .. :)

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

Espero que ajude.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top