2017-03-21 2 views
-1

Ich habe Java-Code geschrieben, der Scanner hat. Was es tun soll, ist 2 Eingänge zu bekommen und dann die Mathematik zu tun. Das Problem ist, dass der zweite Scanner nicht richtig funktioniert. Es führt automatisch die else-Anweisung aus, ohne nach Eingabe zu fragen.Der zweite Scanner ignoriert Eingabe

package stuff; 

import java.util.Scanner; 

public class Diagonal { 

public static void main(String[] args) { 


    double a = Math.pow(getHeight(), 2); 
    System.out.println(a); 
    double b = Math.pow(getWidth(), 2); 
    double c = a + b; 
    System.out.println(Math.sqrt(c)); 


} 

static double getWidth() { 
    Scanner scan = new Scanner(System.in); 
    System.out.println("Enter the width."); 
    double width; 
    if(scan.hasNextDouble()) { 
     width = scan.nextDouble(); 
    } 
    else { 
     System.out.println("Sorry, there was an error!"); 
     width = 0; 
    } 
    scan.close(); 
    return width; 
} 

static double getHeight() { 
    Scanner scan2 = new Scanner(System.in); 
    System.out.println("Enter the height"); 
    double height; 
    if(scan2.hasNextDouble()) { 
     height = scan2.nextDouble(); 
    } 
    else { 
     System.out.println("Sorry, there was an error!"); 
     height = 0; 
    } 
    scan2.close(); 
    return height; 
} 

} 
+1

Hinweis: Verwenden Sie nur einen Scanner und übergeben Sie ihn an beide Methoden. – Sanjeev

+1

Sie schließen den Eingabestream, den Sie nicht ausführen können, wenn Sie erwarten, dass mehr Daten aus dem Eingabestream abgerufen werden. –

Antwort

1

Sie können dies nicht tun:

double a = Math.pow(getHeight(), 2); 
System.out.println(a); 
double b = Math.pow(getWidth(), 2); 

weil getHeight() und getWidth() sind Methoden, die den Scanner in der Nähe, die zu den System.in Strom endet ...

so Ihre 2 Bedingung scan.hasNextDouble() wird nie erfüllt!

Lösung:

Verwendung 1 Scanner-Instanz und es schließen, wenn Sie Eingänge lesen

0

getan werden, können Sie keine Standardeingabe-Stream wieder öffnen, wenn Sie es schließen. Ihre Methode getHeight() schließt sie, sodass Ihre Methode getWidth() sie nicht erneut öffnen kann.

Öffnen Sie einen Standard-Eingabestream einmal für Ihr Programm und schließen Sie es nicht, bis Sie alle Benutzereingaben gelesen haben.

0

Sie können den Standard-Eingabestream nach dem Schließen nicht mehr öffnen. Entfernen Sie daher in unserem Code Scanner-Objekte von beiden Methoden und initialisieren Sie sie einmal in der Hauptfunktion. so und verwenden Sie das "Scan" -Objekt in beiden Funktionen.

`static Scanner scan; 
    public static void main(String[] args) { 
     scan = new Scanner(System.in); 
     double a = Math.pow(getHeight(), 2); 
     System.out.println(a); 
     double b = Math.pow(getWidth(), 2); 
     double c = a + b; 
     System.out.println(Math.sqrt(c)); 
     scan.close(); 
    }` 
Verwandte Themen