2017-10-10 2 views
2

Je suis dans un cours d'introduction Java à mon université. Pour ma mission, je dois écrire un programme pour afficher le nombre de mots de 1 lettre dans une phrase, 2 mots de lettre dans une phrase ... etc. La phrase est entrée par l'utilisateur. Je suis censé utiliser une boucle et je ne suis pas autorisé à utiliser des tableaux.Compter le nombre de lettres dans le premier mot d'une phrase

Cependant pour le moment juste pour commencer, j'essaie juste de trouver le nombre de lettres dans le premier mot de la phrase. Ce que j'ai me donne soit un nombre de lettres incorrect ou une erreur indiquant que l'index de la chaîne est hors limites.

Scanner myScanner = new Scanner(System.in); 

    int letters = 1; 

    int wordCount1 = 1; 

    System.out.print("Enter a sentence: "); 
    String userInput = myScanner.nextLine(); 


    int space = userInput.indexOf(" "); // integer for a space character 

    while (letters <= userInput.length()) { 

    String firstWord = userInput.substring(0, space); 
    if (firstWord.length() == 1) 
     wordCount1 = 1; 
    int nextSpace = space; 
    userInput = userInput.substring(space); 
    } 
    System.out.print(wordCount1); 

Par exemple quand je entrée « Ceci est une phrase » il me donne « index de chaîne hors de portée: 4 » Toute aide à ce serait grandement apprécié.

+0

Il est maintenant temps d'apprendre à utiliser un débogueur. Quelle est la valeur de la variable "espace"? – OldProgrammer

+0

La valeur de 'space' n'est jamais mise à jour –

Répondre

0

Essayez avec:

int len = userInput.split(" ")[0].length(); 

Cela vous donnera un tableau de mots par des espaces dédoublées, puis juste obtenir la première position dans le tableau et finalement obtenir la longueur.

+0

Merci beaucoup pour votre réponse. Malheureusement, je ne suis pas autorisé à utiliser des tableaux car nous ne les avons pas encore couverts en classe. –

0
userInput.indexOf(" "); 

Cela vous donne la longueur du premier mot sans l'utilisation d'un tableau.

Le StringIndexOutOfBoundsException est jeté parce que, depuis space est jamais mis à jour, le code finit par essayer de indice de sous-chaîne 0 à 4 d'une chaîne avec une longueur de 2.

Si userInput a été imprimé dans la boucle while, la sortie serait:

This is a sentence 
is a sentence 
a sentence 
ntence 
ce 

Ensuite, les StringIndexOutOfBounds est jeté.

La façon dont je comptais chaque mot de la phrase sans l'utilisation d'un tableau serait:

Scanner in = new Scanner(System.in); 

System.out.print("Enter a sentence: "); 
String input = in.nextLine(); 
in.close(); 

int wordCount = 0; 

while (input.length() > 0) { 
    wordCount++; 
    int space = input.indexOf(" "); 
    if (space == -1) { //Tests if there is no space left 
     break; 
    } 
    input = input.substring(space + 1, input.length()); 
} 

System.out.println("The number of word entered is: " + wordCount); 
+0

Merci beaucoup pour votre réponse. Je comprends le problème maintenant, je ne sais pas comment le réparer. Je pense que le problème est avec 'userInput = userInput.substring (espace);' qui est supposé le faire passer au mot suivant et au reste de la phrase mais j'ai tort. –

+0

Voir l'édition éditée ... –

0

Votre problème est que vous n'avez pas mise à jour à l'espace et à la lettre. Voir ci-dessous votre code avec mes petits changements qui devraient bien fonctionner.

Scanner myScanner = new Scanner(System.in); 

     int letters = 1; 

     int wordCount1 = 1; 
     String firstWord = null; 

     System.out.print("Enter a sentence: "); 
     String userInput = myScanner.nextLine(); 


     int space = -2; //= userInput.indexOf(" "); // integer for a space character 

     while (letters <= userInput.length() && space != -1) { 

     space = userInput.indexOf(" "); 
     if (space != -1) 
      firstWord = userInput.substring(0, space); 
     if (firstWord.length() == 1) 
      wordCount1 = 1; 
     userInput = userInput.substring(space + 1); 
     } 
     System.out.print(wordCount1); 
}