2016-05-31 8 views
1

In diesem Ausschnitt mache ich drei verschiedene Arten von Variablen, füge sie hinzu und drucke sie dann aus.Java-Scanner akzeptiert keine Zeichenkette, nachdem er eingegeben wurde

public static void main(String[] args) { 
    int i = 4; 
    double d = 4.0; 
    String s = "HackerRank "; 
    Scanner scan = new Scanner(System.in);  
    int firstVariable = 0; 
    double secondVariable = 0.0;  
    String theString = ""; 

    firstVariable = scan.nextInt(); 
    secondVariable = scan.nextDouble(); 
    theString = scan.nextLine(); 

    System.out.println(firstVariable+i); 
    System.out.println(secondVariable+d); 
    System.out.println(s+""+theString); 

} 

Ich reiche Eingang für firstVariable hitting eingeben und dann die Eingabe für secondVariable Bereitstellung und jetzt, sobald ich die Eingabetaste drücken theString diesen Wert wird die Erfassung (Ich weiß, es sollte es einzufangen).
EDIT: in diesem Fall, wie sollte ich die Eingabe theStringohne so gut wie mit Raum bereitstellen?

habe ich so etwas wie dies versuchen,

while(scan.hasNext()) 
     theString = scan.nextLine(); 

Aber es hat nicht funktioniert entweder.

+0

@Tom Nein, es ist nicht doppelt, bitte überprüfen Sie den Bearbeitungsteil. Diese doppelt verknüpften Fragen haben keine Antwort auf diesen EDIT-Teil. Ich meine beide Fälle zu behandeln, d. H. Eingabe nach Leerzeichen sowie neue Zeile. – piechuckerr

Antwort

3

einfach scan.nextLine() überprüfen ist leer, wenn so scan.nextLine() wieder als nächstes rufen:

secondVariable = scan.nextDouble(); 
theString = scan.nextLine().trim(); 
if (theString.isEmpty()) { 
    theString = scan.nextLine(); 
} 

Ein anderer Ansatz mit einem pattern:

firstVariable = scan.nextInt(); 
secondVariable = scan.nextDouble(); 
theString = scan.next("\\w+"); 
+0

Bitte überprüfen Sie die Änderung, die ich in meiner Frage vorgenommen habe. Wenn der Benutzer "theString" bereitstellt, indem er nach der Eingabe der Variable "secondVariable" Platz eingibt, funktioniert die von Ihnen bereitgestellte Lösung nicht. – piechuckerr

+0

Ich habe meine Antwort auf die Unterstützung auch ein Doppel gefolgt von der Zeichenfolge aktualisiert –

+0

@Tunaki Nope Frage ist anders als die üblichen, wo Menschen normalerweise den Unterschied zwischen verschiedenen Arten von Scanner-Methoden wissen wollen – piechuckerr

1

Es gibt zwei Möglichkeiten, um Ihr Problem zu lösen:

Die erste ist

nextLine() 

jedes Mal, wenn Sie von dem Benutzer wie diese lesen zu verwenden:

int firstVariable = scan.nextInt(); 
scan.nextLine(); 
double secondVariable = scan.nextDouble(); 
scan.nextLine(); 
String theString = scan.nextLine(); 

Die zweite ist, die Ganzzahl und den doppelten Wert von nextLine() wie folgt zu analysieren:

int firstVariable = Integer.parseInt(scan.nextLine()); 
Double secondVariable = Double.parseDouble(scan.nextLine()); 
String theString = scan.nextLine(); 
0

Sie benötigen einen zusätzlichen scan.nextLine(); vor Ihrem String theString hinzuzufügen, zu erfassen die Eingabe nach dem Doppelklick. Wie folgt aus:

firstVariable = scan.nextInt(); 
secondVariable = scan.nextDouble(); 
scan.nextLine(); 
theString = scan.nextLine(); 

Wie ein Rat den Code zu reduzieren, gibt es keine Notwendigkeit, diese hinzuzufügen:

int firstVariable = 0; 
double secondVariable = 0.0;  
String theString = ""; 

Fügen Sie einfach den Typ der Variablen um den Scan zu erfassen:

int firstVariable = scan.nextInt(); 
double secondVariable = scan.nextDouble(); 
scan.nextLine(); 
String theString = scan.nextLine(); 
Verwandte Themen