2015-09-22 2 views
0
import java.io.*; 
import java.util.*; 

public class Main{ 
    public static void main(String [] args) throws InputMismatchException{ 
    double width; 
    int period; 
    double Ppp; 
    Scanner in0 = new Scanner(System.in); 
    Scanner in1 = new Scanner(System.in); 
    Scanner in2 = new Scanner(System.in); 
    System.out.println("Give width\n"); 
    while(in0.hasNextDouble()){ 
     width = in0.nextDouble(); 
    } 
    in0.close(); 
    System.out.println("\n"); 
    System.out.println("Give period"); 
    while(in1.hasNextInt()){ 
     period = in1.nextInt(); 
    } 
    in1.close(); 
    System.out.println("\n"); 
    System.out.println("Insert width peak to peak"); 
    while(in2.hasNextDouble()){ 
     Ppp = in2.nextDouble(); 
    } 
    in2.close(); 
} 

Je lance ce bloc de code I insérer la première entrée, mais il affiche nulle pour chaque entrée puis planter quelqu'un mai exécuter et dire s'il a le même problème J'utilise BlueJ compilateurScanner lance InputMismatchException avec null

+0

Pourquoi avez-vous plusieurs instances de scanner? – Amr

+0

Comment savez-vous qu'il affiche "null"? Entrez-vous vos doubles en utilisant une virgule ou un point? –

+0

Ce programme ne peut pas afficher "null". Pour commencer, il n'essaie même pas d'afficher les entrées. Veuillez décrire votre problème de façon claire et précise si vous voulez que nous vous aidions. –

Répondre

0
public static void main(String [] args) throws InputMismatchException{ 
    double width; 
    int period; 
    double Ppp; 
    Scanner in0 = new Scanner(System.in); 

    System.out.println("Give width\n"); 
    // This will read the line, and parse the result as a double, this way you can insert a number and press enter 
    width = Double.parseDouble(in0.nextLine()); 

    System.out.println("Give period"); 
    period = Integer.parseInt(in0.nextLine()); 

    System.out.println("\n"); 
    System.out.println("Insert width peak to peak:"); 
    ppp = Double.parseDouble(in0.nextLine()); 

    in0.close(); 
    } 
+0

Ce code ne compilera pas ... – Tom

2

la cause du problème est

Scanner in0 = new Scanner(System.in); 
Scanner in1 = new Scanner(System.in); 
Scanner in2 = new Scanner(System.in); 

et ce

in0.close(); 
... 
in1.close(); 
... 
in2.close(); 

Lorsque vous créez le scanner, vous travaillez sur System.in, alors vous fermez. Cela cause que le prochain scanner fonctionne sur un flux fermé. La solution est de créer un seul Scanner pour InputStream.

Scanner scanner = new Scanner(System.in); 

System.out.println("Give width\n"); 
double width = scanner.nextDouble(); 

System.out.println("Give period"); 
int period = scanner.nextInt(); 

System.out.println("\nInsert width peak to peak:"); 
double p2p = scanner.nextDouble(); 

Ceci est seulement un exemple qui ne valide pas l'entrée de l'utilisateur.