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(); 
} 

я запускаю этот блок кода вставить первый вход, но он показывает нуль для каждого входа , а затем его падение Может кто-то запустить его и сказать, если он имеет ту же проблему я использую BlueJ компиляторСканер бросает InputMismatchException с нулевой

+0

Почему у вас есть несколько экземпляров сканера? – Amr

+0

Откуда вы знаете, что он отображает «null»? Вы вводите свои двойники с помощью запятой или точкой? –

+0

Эта программа не может отображать «null». Для начала он даже не пытается отображать входы. Пожалуйста, опишите вашу проблему четко и точно, если вы хотите, чтобы мы вам помогли. –

ответ

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

Этот код не будет компилироваться ... – Tom

2

причиной проблемы является то, это

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

и это

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

При создании сканера, вы работаете на System.in, затем закрыть его. Это приводит к тому, что следующий сканер работает с закрытым потоком.

Решение проблемы заключается в создании единственного Scanner для 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(); 

Это только пример, который не подтверждает ввод пользователя.

Смежные вопросы