2013-05-10 4 views
0

Je suis un débutant en Java & J'ai vraiment besoin de cette réponse. Je suis en train de créer un triangle dans cette séquence:imbriqué pour la boucle pour un triangle

1 
21 
321 
4321 
54321 

Même si ma syntaxe est correcte, j'ai été en passant par des erreurs logiques avec des boucles non de terminaison.

C'est le programme que je suis en train de fixer:

for(i=1;i>=1;i++) 
    { 
     for(j=i;j<=i;j=j-1) 
     { 
      System.out.print(j);   
     } 
     System.out.println(); 
    } 

aide serait vraiment appréciée pour cela.

Répondre

2

Vous obtenez boucle non-terminaison à cause de cette

for(i=1;i>=1;i++) 

Le code signifie, vous voulez boucler le corps si i supérieur ou égal à 1 (i>=1), et cette valeur i sont toujours incrémentée par 1 (i++) pour chaque boucle, donc il a toujours une valeur supérieure à 1 et cette condition est toujours correcte pour le code de boucle. Donc vous devez corriger l'instruction loop.

1

n'est pas correct car l'incrémentation de 1 entraîne toujours un nombre supérieur à 1, donc la boucle ne se termine qu'après i = (2^31 -1) itérations. Donc, pour la sortie étant donné votre boucle devrait ressembler à ceci:

for(int i=1;i<=5;i++) 
    { 
     for(int j=i;j>=1;j--) 
     { 
      System.out.print(j);   
     } 
     System.out.println(); 
    } 
+4

* "' pour (i = 1; i> = 1; i ++) 'est une boucle non terminante *" Eh bien, en supposant que 'i' est un' int', c'est vraiment *** *** , mais ça finira par se terminer une fois que je reviendrai. ;-) –

2

Je ne suis pas sûr d'avoir compris votre problème, mais le code suivant créé un beau triangle pour moi.

int i,j; 
for(i = 1; i>= 1 && i < 10; i++) 
{ 
    for(j = i; j <= i && j > 0; j = j - 1) 
    { 
     System.out.print(j);   
    } 
    System.out.println(); 
} 
+1

@Mateusz que ** supplémentaires ** obtiendriez-vous de cela? – Ankit

+0

@Mateusz C'est largement une question de style –

+0

@Mateusz En l'état, il réalise cela, un println() sur une ligne active va juste finir la ligne active et passer à la suivante. Il ne mettra pas une ligne vide supplémentaire (sauf s'il y avait un println() précédemment qui "a commencé" une nouvelle ligne active) –

0

de course à travers la boucle

for(j=i;j<=i;j=j-1) (assume i is 2 for the example) 

j = 2, est égal à 2 < = 2, oui: exécuter boucle
j = j-1 (j = 2-1 = 1)

j = 1, est une < = 2, oui: exécuter boucle
j = j-1 (j = 1-1 = 0)

j = 0, a 0 = 2 <, oui : Boucle initiée
j = j-1 (j = 0-1 = -1)

j = -1, -1 est < = 2, oui: boucle d'exécution
j = j-1 (j = -1-1 = -2)

etc

j devient de plus en plus petit donc il sera toujours inférieur à 2.

i est exactement le problème inverse, est toujours grossit il sera Toujours être supérieur à 1.

+0

p.s. si vous utilisez un IDE (comme eclipse ou netbeans) essayez de lancer des programmes comme celui-ci dans le débogueur pour le voir se produire –

+0

merci à tous! le programme a été effacé successivement! – user2369194

+0

@ user2369194 C'est bon à entendre, merci de revenir nous mettre à jour! Envisagez d'accepter (la coche) quelle que soit la réponse qui vous a le plus aidé –

0
public static void main(String[] args) 
{ 
    for(int x=1;x<=5;x++) 
    { 
     for(int j=x;j>=1;j--) 
     { 
      System.out.print(j); 
     } 

     System.out.println(); 
    } 
} 
+0

Veuillez expliquer ce que votre code fait pour le bénéfice des autres lecteurs. – Jens

+0

@jens Je pensais que c'était juste le modèle que nous devons imprimer C'est pourquoi j'ai écrit et collé le code ... Je verrai de la prochaine fois que je pourrais expliquer ... de toute façon merci ... – user2798256

Questions connexes