2017-07-23 3 views
0

Hinweis: Ich bin dies auf Netbeans laufen 8.2 und Windows 7kann nicht richtig in Zeichen lesen mit 'Scanner' und '.next() charAt (0).'

Dieses Programm für die Benutzereingabe fragt, Sie können ein Zeichen eingeben, die Leertaste drücken oder einen Punkt eingeben, um das Programm anzuhalten.

1) Wenn I ein Zeichen I die folgende Fehlermeldung eingeben: "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) Wenn ich die Leertaste komme ich keine Rückmeldung, bis ich einen Zeitraum eingeben und I erhalten dann eine Fehlermeldung wie oben aber das Programm hört auf.

3) Wenn ich einen Punkt eingeben, bekomme ich auch eine ähnliche Fehlermeldung, aber das Programm stoppt.

Was ich erwarte ist folgende: a) wenn ich die Leertaste eine Meldung zurück, sagt, dass ich die Leertaste und erhöhe beiden Zähler b) wenn ich ein Zeichen eingeben, dann gibt es eine Meldung, das eingegebene Zeichen und erhöht die ctr Zähler c) wenn eine Periode eingegeben wird dann gibt er eine Nachricht, dass plus die Anzahl, wie oft sagen, um das Programm zu stoppen

ich vermute, das Problem mit der keystroke = userInput.next().charAt(0); Aussage. Ich dachte, mit userInput.next().charAt(0) würde funktionieren, weil sie alle einzelne Tastenanschläge und Zeichen sind. Der Raum ist ein Charakter, richtig? Falsch? Also, wenn jemand mir in die richtige Richtung zeigen könnte, um das zu beheben, würde das geschätzt werden.

/* 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

'sonst System.out.println ("Sie trat ein" + userinput);' ---> diese 'sonst System.out.printin ändern (“ Sie haben einen "+ Tastendruck" eingegeben; ' –

Antwort

1

müssen Sie nextLine() anstelle von next() Räume zu lesen. Weitere Details finden Sie hier: Scanner doesn't see after space. Verwenden Sie isSpaceChar zum Überprüfen des Speicherplatzes mit einer Variablen. Weitere Details finden Sie hier: Checking Character Properties. Der korrigierte Code ist ....

/* 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"); 
     } 
    } 
}