2015-04-17 8 views
7

Ich bin ein Anfänger in Java. Ich möchte zuerst überprüfen, ob die Benutzereingabe String oder Double oder int ist. Wenn es sich um eine Zeichenfolge, eine doppelte oder eine negative Zahl handelt, sollte der Benutzer aufgefordert werden, erneut eine gültige int-Nummer einzugeben. Erst wenn der Benutzer eine gültige Nummer eingegeben hat, sollte das Programm zum Versuch springen. Ich habe stundenlang nachgedacht und mir nichts Nützliches einfallen lassen. Bitte helfen, danke!Wie überprüft man, ob Benutzereingabe String, doppelt oder lang in Java ist

import java.util.InputMismatchException; 
import java.util.Scanner; 

public class Fizz { 

public static void main(String[] args) { 

    System.out.println("Please enter a number"); 

    Scanner scan = new Scanner(System.in); 

    try { 

     Integer i = scan.nextInt(); 

     if (i % 3 == 0 && (i % 5 == 0)) { 
      System.out.println("FizzBuzz"); 
     } else if (i % 3 == 0) { 
      System.out.println("Fizz"); 
     } else if (i % 5 == 0) { 
      System.out.println("Buzz"); 
     } else { 
      System.out.println(i + "は3と5の倍数ではありません。"); 
     } 
    } catch (InputMismatchException e) { 
     System.out.println(""); 

    } finally { 
     scan.close(); 
    } 

} 
+0

Dank für Ihre Hilfe danken! Aber wo sollte ich den Code hinzufügen? Ich habe versucht, es hinzuzufügen, und ich bekomme eine Fehlermeldung.Könnten Sie bitte mit Ihrem Code zu meinem Code hinzugefügt? Danke nochmal! – user4799681

+0

Ersetzen Sie die Zeile 'Integer i = scan.nextInt();' mit dem Code von @TheLostMind und nach seinem Block (vergessen Sie nicht ';' nach seinem Code) fügen Sie die Zeile 'int = Integer hinzu. parseInt (s); ' – halex

+0

Vielen Dank! Es kompiliert und läuft jetzt gut! – user4799681

Antwort

8

Eine einfache Lösung ist es, die gesamte Zeile/Benutzereingabe als String zu lesen. So etwas sollte funktionieren. (Nicht getesteter Code):

String s=null; 
    boolean validInput=false; 
    do{ 
     s= scannerInstance.nextLine(); 
     if(s.matches("\\d+")){// checks if input only contains digits 
     validInput=true; 
     } 
     else{ 
     // invalid input 
    } 
    }while(!validInput); 
+0

Würde 'Scanner.nextInt' keine Ausnahme auslösen, wenn die Eingabe keine Nummer wäre? Es wäre einfacher, diese Ausnahme richtig zu verstehen? –

+0

@JayanthKoushik - Aber das ist nicht der richtige Weg. :) .. Warum fangen Ausnahmen, wenn Sie Code ohne sie ausführen können? – TheLostMind

+0

@JayanthKoushik Es könnte sein, dass die Zeichenfolge mit einer Ganzzahl beginnt, aber auch andere Zeichen enthält. Und es prüft daher auch nicht, ob ein Double gegeben wurde, da es am Ende der Integer abschneiden würde. Es würde auch weitere Eingaben verfälschen. –

1

Sie können auch Integer.parseInt verwenden und dann diese Ganzzahl auf Nicht-Negativität prüfen. Sie können NumberFormatException abfangen, wenn die Eingabe eine Zeichenfolge oder ein Double ist.

Scanner scan = new Scanner(System.in); 
try { 
    String s = scan.nextLine(); 
    int x = Integer.parseInt(s); 
} 
catch(NumberFormatException ex) 
{ 
} 
+0

Was ist mit negativen ganzen Zahlen? – TheLostMind

+0

Es wird eine zusätzliche Überprüfung auf negative ganze Zahlen benötigt, nachdem überprüft wurde, dass es sich um eine ganze Zahl handelt. –

0

Versuchen Sie diese. Ich habe einige Bedingungen verwendet, um die Eingabe anzuzeigen.

Scanner scan = new Scanner(System.in); 
String input = scan.nextLine(); 
int charCount = input.length(); 
boolean flag = false; 
for(int x=0; x<charCount; x++){ 
    for(int y=0; y<10; y++){ 
     if(input.charAt(x)==Integer.toString(y)) 
      flag = true; 
     else{ 
      flag = false; 
      break; 
     } 
    } 
} 
if(flag){ 
    if(scan.hasNextDouble()) 
     System.out.println("Input is Double"); 
    else 
     System.out.println("Input is Integer"); 
} 
else 
    System.out.println("Invalid Input. Please Input a number"); 
0

Versuchen Sie dies. Es fordert zur Eingabe, bis ein int größer als 0 eingegeben wird:

System.out.println("Please enter a number"); 

try (Scanner scan = new Scanner(System.in)) { 
    while (scan.hasNext()) { 
     int number; 
     if (scan.hasNextInt()) { 
      number = scan.nextInt(); 
     } else { 
      System.out.println("Please enter a valid number"); 
      scan.next(); 
      continue; 
     } 

     if (number < 0) { 
      System.out.println("Please enter a number > 0"); 
      continue;   
     } 

     //At this stage, the number is an int >= 0 
     System.out.println("User entered: " + number); 
     break; 
    } 
} 
0
boolean valid = false; 
double n = 0; 
String userInput = ""; 
Scanner input = new Scanner(System.in); 

while(!valid){ 
    System.out.println("Enter the number: "); 
    userInput = input.nextLine(); 

    try{ 
     n = Double.parseDouble(userInput); 
     valid = true; 
    } 
    catch (NumberFormatException ex){ 
     System.out.println("Enter the valid number."); 
    } 
} 
Verwandte Themen