2017-07-23 2 views
0

Note: Je suis en cela sur Netbeans 8.2 et Windows 7ne peut pas lire correctement en caractères à l'aide de 'Scanner' et '.next() charAt (0).'

Ce programme demande l'entrée d'utilisateur, Ils peuvent entrer un personnage, appuyer sur la barre d'espace ou entrer une période pour arrêter le programme.

1) Quand je rentre un personnage que je reçois le message d'erreur suivant: "You entered a java.util.Scanner[delimiters=\p{javaWhitespace}+][position=1][match valid=true][need input=false][source closed=false][skipped=false][group separator=\,][decimal separator=\.][positive prefix=][negative prefix=\Q-\E][positive suffix=][negative suffix=][NaN string=\Q?\E][infinity string=\Q8\E]"

2) Quand je frappe la barre d'espace je reçois pas de commentaires jusqu'à ce que j'entrer dans une période, puis je reçois un message d'erreur semblable au-dessus mais le programme s'arrête.

3) Si j'entre une période, je reçois également un message d'erreur similaire mais le programme s'arrête.

Ce que je me attends est la suivante: a) si je frappe la barre d'espace, il renvoie un message disant que je frappe la barre d'espace et incrémente les compteurs b) si je rentre un caractère, puis il retourne un message indiquant le caractère saisi et incrémente le compteur ctr c) si une période est entré il retourne un message indiquant que plus le nombre de fois pour arrêter le programme

Je devine que le problème est avec la déclaration keystroke = userInput.next().charAt(0);. Je pensais que l'utilisation de userInput.next().charAt(0) fonctionnerait car ce sont toutes des frappes et des caractères uniques. L'espace est un personnage, non? Faux? Donc, si quelqu'un pouvait me diriger dans la bonne direction pour résoudre ce problème, cela serait apprécié.

/* reads a char, a space, or a period from keyboard, returns user input, 
    counts number of spaces and total number of entries */ 

package ch03_36_exercise_01; 
import java.util.Scanner; 

public class Ch03_36_Exercise_01 { 
    public static void main(String args[]) throws java.io.IOException { 

    Scanner userInput = new Scanner(System.in); 
    char keystroke;   // character that user enters 
    int ctr = 0, spaces = 0; // num of tries to stop run, num of spaces entered 

    do { 
     // ask for user input 
     System.out.print("Enter a character, or hit the space bar," + 
         " or enter a period to stop: "); 
     keystroke = userInput.next().charAt(0); 

     if (keystroke == ' ') { 
     System.out.println("You entered a space"); 
     spaces++; // increment space bar count 
     } 

     else 
     System.out.println("You entered a " + keystroke); 

     // increment keystroke count 
     ctr++; 
    } 
    while (keystroke != '.'); 

    System.out.print("It took " + ctr + " tries to stop"); 

    if (spaces > 0) 
     System.out.println(" and you hit the space bar " + spaces + " times\n"); 

    else 
     System.out.println(); 
    } 
} 
+1

'autre System.out.println ("vous avez entré un" + UserInput)' ---> changer cela 'autre System.out.println (» Vous avez entré une "+ frappe de clavier"; –

Répondre

1

Vous devez utiliser nextLine() au lieu de next() lire des espaces. Voir plus de détails ici: Scanner doesn't see after space. Utilisez isSpaceChar pour vérifier l'espace avec une variable. Voir plus de détails ici: Checking Character Properties. Le code corrigé est ....

/* reads a char, a space, or a period from keyboard, returns user input, 
    counts number of spaces and total number of entries */ 
package ch03_36_exercise_01; 

import java.util.Scanner; 

public class Ch03_36_Exercise_01 { 

    public static void main(String args[]) throws java.io.IOException { 

     Scanner userInput = new Scanner(System.in); 
     char keystroke;   // character that user enters 
     int ctr = 0, spaces = 0; // num of tries to stop run, num of spaces entered 

     do { 
      // ask for user input 
      System.out.print("Enter a character, or hit the space bar," 
        + " or enter a period to stop: "); 
      keystroke = userInput.nextLine().charAt(0); 

      if (Character.isSpaceChar(keystroke)) { 
       System.out.println("You entered a space"); 
       spaces++; // increment space bar count 
      } else { 
       System.out.println("You entered a " + keystroke); 
      } 

      // increment keystroke count 
      ctr++; 
     } while (keystroke != '.'); 

     System.out.print("It took " + ctr + " tries to stop"); 

     if (spaces > 0) { 
      System.out.println(" and you hit the space bar " + spaces + " times\n"); 
     } 
    } 
}