2011-10-20 2 views
2

Je suis en train de comprendre le code de suivi ci-dessous:Que signifie ';' à l'intérieur de pour déclaration?

/** 
    * Simple insertion sort. 
    * @param a an array of Comparable items. 
    */ 
    public static void insertionSort(Comparable [ ] a) 
    { 
     for(int p = 1; p < a.length; p++) 
     { 
      Comparable tmp = a[ p ]; 
      int j = p; 
      for(; j > 0 && tmp.compareTo(a[j-1]) < 0; j--) 
       a[ j ] = a[ j - 1 ]; 
      a[ j ] = tmp; 
     } 
    } 

Mais je ne suis pas sûr de ce que signifie for(;) donc je besoin de votre aide les gars. Désolé si c'est en double mais je recherche ici et dans Google mais rien pour l'instant.

+0

Il s'agit simplement d'initialiser la variable j, comme vous devez savoir toutes les boucles ont l'initialisation en trois parties, vérification de la condition, incrément/décrément – Mike

Répondre

7

La première partie d'une boucle for est ce qui se passe avant le début de la boucle. Habituellement, il est utilisé pour assigner une variable.

Le ";" avec rien (en dehors de la parenthèse) avant qu'il dise simplement "il n'y a rien que je veux faire avant le début de la boucle". Aucune variable ne doit être affectée, etc.

+0

Toutes les 3 parties de la boucle for est optionnelle. Ainsi, par exemple, vous pouvez utiliser 'for (;;)' pour une boucle infinie. Bien que je préfère habituellement utiliser l'équivalent 'while (true)' à la place. – Brian

+0

Très vrai. car (;;) n'est préférable que lors des tests et vous pouvez ajouter des variables, etc. tandis que (true) est définitivement plus lisible. –

+0

J'allais dire que vous devriez le changer en 'for (int j) ...', mais j'ai alors réalisé qu'il faisait référence à 'j' sous la boucle. Cela signifie, cependant, qu'il ne pouvait pas supprimer complètement la ligne au-dessus de la boucle for et qu'il aurait plutôt besoin de 'int j; for (j = p ...'.) Donc, je suis revenu à votre version, même si c'est encore un peu – Brian

0

Je suppose que vous vous promenez à propos de la deuxième syntaxe de boucle. C'est juste une boucle régulière sans partie d'initialisation. j doit être déclaré avant la boucle car il est utilisé à l'extérieur, une fois la boucle terminée.

0

C'est juste un séparateur. S'il n'y a rien devant, cela signifie qu'une partie de la logique est vide. Le format est

for( <stuff to do before starting the loop> 
    ; 
     <stuff to do before each iteration, and maybe give a value of 0 to terminate it> 
    ; 
     <stuff to do at the end of each iteration> 
    ) 

Franchement je trouve très flexible, car tous boucle est de la forme « faire pour chaque xxx ». Ce que vous mettez dans chacune de ces sections est vraiment arbitraire.

2

Il est simple: Cela signifie essentiellement

for(..a.. ; ..bb.. ; ..c..){ // }. 

..a ..: est ce que vous initialisez le cas échéant, ou le laisser vide. ..b ..: Toute vérification que vous souhaitez effectuer une fois qu'une boucle est exécutée une fois. ..c .. Tout changement à la variable après que la boucle est exécutée une fois

Questions connexes