Réduire au minimum les boucles en référence aux opérations de lecture / écriture
-
27-09-2019 - |
Question
la dernière chose que je veux minimiser aujourd'hui est le code qui contient tout et boucles do-while. Voici l'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
Et voici ma version réduite:
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
Il génère la même sortie pour moi. Est-ce que vous voyez des erreurs ou des choses qui peuvent être améliorées?
En particulier, ce code semble être délicat:
/* 3 */ while (c1 % 8 != 0)
/* 4 */ if ( c1 % 16 == 0 ) ;
/* 5 */ else
/* 6 */ do{}
Comment puis-je faire face au temps? Que contient la boucle while?
La solution
Votre version réduite produit le même résultat que la version originale, les sorties différentes pour votre solution originale et votre version réduite ne sont possibles que dans le cas où c1 % 8 != 0 and c1 % 16 == 0
,
ce cas est impossible puisque tous les multiples de 16 sont multiples 8 trop ..
Retrait de la non utilisée declarations..is la seule amélioration que je pourrais suggérer. J'ai une solution avec moins code..Not que cela rend les choses mieux ... Je ne aime pas trop de sysouts dans le code ..:)
int finalBound = ((c1 + 7) % 8 == 0) ? c1 + 7 : 8 * c1;
for (; c1 <= finalBound; c1 += 7) {
System.out.println(c1 + 7);
}
L'espoir qui aide.