2015-03-15 3 views
0

У меня возникают проблемы, когда пользователь вводит «L» или «%» в качестве примера (сообщение об ошибке отображается правильно, поскольку только номера должны быть введены), однако после этого появляется следующее входное сообщение «Пожалуйста, введите средний импульс». Я хочу остановить его, пока пользователь не войдет в число, и затем появится следующий. Извините, если им не ясно, пожалуйста, не стесняйтесь спрашивать.Как убедиться, что номер введен на консоль

// UserEntry класс

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.io.IOException; 

public class UserEntry{ 

public double totalImpulse ; 
public double averageImpulse; 


//Declaring all user input, with exception handling 
double totalImpulse(){ 

BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 

// String for Total Impulse 
String strtotalImpulse = null; 
int inttotalImpulse = 0; 

try { 
strtotalImpulse = in.readLine(); 
} 
catch (IOException ioe) { 
} 

// convert it to integer 
try { 
double totalImpulse=Double.valueOf(strtotalImpulse); //Exception handling (Only integers) 
} 
catch (Exception e) { 
    System.out.println("Please enter an Integer for Total Impulse!"); //Print this when "L" or "%" , not integer has been entered. 
} 
return inttotalImpulse; 

}

double averageImpulse(){ 

BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 

// String for Total Impulse 
String straverageImpulse = null; 
int intaverageImpulse = 0; 

try { 
straverageImpulse = in.readLine(); 
} 
catch (IOException ioe) { 
} 
// convert it to integer 
try { 
double averageImpulse=Double.valueOf(straverageImpulse); //Exception handling (Only integers) 
} 
catch (Exception e) { 
    System.out.println("Please enter an Integer for Average Impulse!"); //Print this when "L" or "%" , not integer has been entered. 
} 
return intaverageImpulse; 

}}

// Мастер-класс (вход)

public class Master { //Master class 

public static void main(String args[]) //Standard header for main method 
{ 


//User inputs 
UserEntry input = new UserEntry(); //Creating object from UserEntry class 

System.out.print("\nPlease enter Total impulse delivered: "); 
input.totalImpulse(); 

System.out.print("Please enter Average impulse delivered: "); 
input.averageImpulse(); 
} 
} 
+0

(Исключение должно быть брошенные это связано с обработкой исключений, а недопустимый ввод пользователя еще не является исключением.) – user2864740

+1

* «ничего, кроме целых (1, 2, 5.05, 10.10)» * 5.05 и 10.10 не являются целыми числами. Просьба уточнить. – Radiodef

ответ

0

Это решение очень похоже на Turtle one, но удаляет немного дублированного кода и заставляет MasterClass ждать значения. я немного изменилась логика, и для ввода чтения используется сканер, как видно по этому вопросу How can I read input from the console using the Scanner class in Java?

Мастер-класс

public static void main(String args[]) //Standard header for main method 
{ 
      //User inputs 
UserEntry input = new UserEntry(); //Creating object from UserEntry class 


Double totalImpulse = null; 
while(totalimpulse==null){ 

    System.out.print("\nPlease enter Total impulse delivered: "); 
    try { 
    totalimpulse= input.getDoubleFromConsole(); 
} 
catch(Exception e){ 
System.out.println("please enter a number:"); 
} 
} 
Double averageImpulse=null; 
while(averageImpulse==null){ 
    System.out.print("Please enter Average impulse delivered: "); 

    try{ 
     averageImpulse= input.getDoubleFromConsole(); 
    } 
    catch(Exception e){ 
System.out.println("please enter a number:"); 
} 
} 
} 

UserEntry:

double getDoubleFromConsole(){ 

      Scanner sc = new Scanner(System.in); 
      double i = sc.nextDouble(); 

    } 
+0

Спасибо. Это сработало, но я все еще не могу ввести новое значение. Он успешно заставляет класс ждать значения, но тогда он не позволит мне повторно вводить после недопустимого ввода. –

+0

Обновлен с удвоенным кодом, и вся логика повторения в основном классе, которая должна работать. –

+0

Я немного смущен вами обновленной версией. Я хочу, чтобы вся обработка исключений в моем классе UserEntry не была классом Master, –

0
while(true){ 
    try { 
     strtotalImpulse = in.readLine(); 
    } catch (IOException ioe) { } 
    try{ 
     double yourReturnValue=Double.valueOf(strtotalImpulse); 
     return yourReturnValue; //we get a double 
    }catch (Exception e) { //oops... there is something wrong when trying to cast string to double. So it must be wrong with user input. 
     System.out.println("please enter a number:"); 
    } 
} 
+0

Большое спасибо! Наконец, как я могу остановить его от перехода на следующий вход, пока пользователь не войдет в число? Таким образом, это не позволит прогрессировать, пока ввод не будет числом. –

+0

@ViktorSzabad код делает именно это - он застревает в цикле while, пока пользователь не вводит число, и он возвращает - если пользователь не вводит число, исключение выдается перед возвратом и запрашивает у пользователя эфир номер снова. –

+1

Хотя этот ответ, вероятно, правильный и полезный, рекомендуется включить в него некоторое объяснение, чтобы объяснить, как оно помогает решить проблему. Это становится особенно полезным в будущем, если есть изменения (возможно, не связанные), которые заставляют его перестать работать, и пользователи должны понимать, как он работал. –

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