2010-09-26 5 views
1

Je ne peux pas obtenir ce programme pour compter les espaces, j'ai le sentiment qu'il y a une erreur de logique dans la boucle, mais je suis trop inexpérimenté pour le comprendre moi-même. Des conseils?Quel est le problème avec cette boucle For?

System.out.print("Enter a string: "); 
String myString = keyboard.next(); 
int numBlanks = 0; 

//find string length 
int length = myString.length() - 1; 
System.out.println("length " + length); 

for(int sequence = 0; sequence >= length; ++sequence); 
{ 

    if(myString.charAt(length)==' ') 
    { 
     numBlanks += 1; 
     length -= length; 
    } 
    else 
     length -= length; 

} 
+2

(Avec les conventions de codage standard, vous n'obtiendrez pas le problème du faux point-virgule sur la boucle 'for'.) –

Répondre

9

Il y a quelques bugs que je peux voir:

Semicolon à la fin de boucle. Retirez-le.

Suivant

sequence >= length 

devrait être

sequence <= length 

et

if(myString.charAt(length)==' ') 

devrait être

if(myString.charAt(sequence)==' ') 

et vous devez changer length du tout que vous changez déjà sequence.

Ainsi nous obtenons:

for(int sequence = 0; sequence <= length; ++sequence) { 

    if(myString.charAt(sequence)==' ') { 
     numBlanks += 1; 
    } 
} 
+1

+1 mais pensez qu'il devrait y avoir un" ne pas "dans: et vous devez changer la longueur – barrowc

3

sequence >= length est parlé à haute voix comme "sequence est supérieur ou égal à length." Il est initialisé à zéro. Quand sera-t-il supérieur ou égal à length?

+0

Une raison pour laquelle j'ai eu une downvote ici? –

0

Première question:

changement

for(int sequence = 0; sequence >= length; ++sequence); 

à

for(int sequence = 0; sequence <= length; ++sequence); //flipped >= to <= 

Deuxième question:

changement

I am too inexperienced to figure it out myself. 

à

This will be some good practice for debugging. //int confidence should never be negative 

: D

+0

Pendant que vous corrigez le 'premier numéro', n'oubliez pas de supprimer le point-virgule supplémentaire à la fin de la phrase :-) – Grodriguez

1

En plus des erreurs d'autres l'ont souligné, il y a des violations de la convention ici; vous calculez la longueur de n - 1, puis comparez < = (bien,> =, mais vous devriez utiliser < =). En règle générale, à moins d'une très bonne raison, notre pour les boucles ressembler à ceci:

for (int i = 0; i < n; i++) { 
    ... 
} 

Dans votre cas, ce serait exprimé comme suit:

for (int i = 0; i < myString.length(); i++) { 
    ... 
} 

Il est également classique de rester avec « i » comme variable de boucle, sauf s'il y a de bonnes raisons d'en utiliser une autre; dans votre cas, "séquence" est juste confuse.

Questions connexes