2014-10-20 2 views
1

Я ищу ответ на вопрос, как правильно запустить программу. Я хочу, чтобы моя программа распознавать другие чем в два раза вещи --- например, если я помещен в ИДК было бы сказать, , что не является числом, а не сбой.Java Validating Input в базовой программе калькулятора

мой код:

import java.util.*; 

public class CalculatorMain { 
    public static void main(String[] args) { 

     FunctionMain action = new FunctionMain(); 

     Scanner input = new Scanner(System.in); 

     double answer = 0; 
     double inputNu1, inputNu2; 
     char operator; 
     boolean end = false; 

    while (! end) { 
      System.out.print(">>>"); 

      inputNu1 = input.nextDouble(); 
      operator = input.next().charAt(0); 
      inputNu2 = input.nextDouble();   

    switch (operator) 
      { 
     case '-': answer = action.Subtract(inputNu1, inputNu2); 
       break; 
     case '*': answer = action.Multiply(inputNu1, inputNu2); 
       break; 
     case '+': answer = action.Add(inputNu1, inputNu2); 
       break; 
     case '/': answer = action.Divide(inputNu1, inputNu2); 
       break;   
      } 

     System.out.println(answer);    
     }  
     input.close(); 

    } 

} 



public class FunctionMain { 

    double Subtract (double Nu1 , double Nu2) 
    { 
     return Nu1 + Nu2; 

    } 
    double Multiply (double Nu1 , double Nu2) 
    { 
     return Nu1 * Nu2; 
    } 
    double Add (double Nu1 , double Nu2) 

    { 
     return Nu1 + Nu2; 
    } 
    double Divide (double Nu1 , double Nu2) 

    { 
     return Nu1/Nu2; 
    } 

} 
+1

Вы получаете исключения, когда вы вводите что-то другое, чем число правильно? Вы знаете, как исключения работают на Java? Кроме того, у Сканера есть метод, называемый 'hasNextDouble()': http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#hasNextDouble() – thatidiotguy

+0

Я не знаю, что вы имеете в виду когда вы говорите «исключения». Когда я помещаю ввод с удвоениями, как предполагалось, нет проблем, но буквы приводят к его сбою. Я думал об использовании инструкции Do While. Чувствует ли это? – Integral

ответ

0

При попытке преобразовать строку в Double вы получите исключение, так что вы должны управлять его следующим образом:

double n = 0.0; 
try { 
    n = input.nextDouble(); 
} catch (Exception e) { 
    // there was an error, and here we can do whatever 
    System.out.println("It was not a number!"); 
} 

Узнайте больше о excpetions: http://docs.oracle.com/javase/tutorial/essential/exceptions/

+0

Вы не должны ловить обобщенное «Исключение», когда знаете, какой из них будет создан ('InputMismatchException'). – thatidiotguy

+0

Но как это сделать в коде, который у меня есть? – Integral

+0

Код, который делает конверсии, должен быть окружен try {...} catch. Быстро посмотрите ссылку на мое сообщение :-) – arutaku

0

Что-то вроде:

public static boolean isNumeric(String str) 
{ 
    return str.matches("-?\\d+(\\.\\d+)?"); //match a number with optional '-' and decimal. 
} 

или:

public static boolean isNumeric(String str) 
{ 
    try 
    { 
    double d = Double.parseDouble(str); 
    } 
    catch(NumberFormatException nfe) 
    { 
    return false; 
    } 
    return true; 
} 

Отъезд: How to check if a String is numeric in Java

0

Основная идея здесь, чтобы найти исключение брошенный Scanner когда маркер извлекаться не соответствует ожидаемому типу. Если вы введете неправильный ввод в свой код, вы увидите java.util.InputMismatchException, показанное на консоли. Поэтому мы могли бы просто использовать try{....}catch(java.util.InputMismatchException e){....}, чтобы поймать это конкретное исключение и добавить определенное пользователем действие.

Я отредактировал ваш CalculatorMain class, теперь, если вы вводите ввод, который не может быть разобран на два, консоль выдаст предупреждение и предложит вам ввести новые входы снова.

 
**Sample console output:** 
>>>jdk 
java.util.InputMismatchException 
jdk IS INVALID INPUT 
>>>test 
java.util.InputMismatchException 
test IS INVALID INPUT 
>>>input 10 
* 
789 
7890.0 
import java.util.*; 
public class CalculatorMain { 
public static void main(String[] args) { 
    FunctionMain action = new FunctionMain(); 
    double answer = 0; 
    double inputNu1, inputNu2; 
    char operator; 
    boolean end = false; 
    Scanner input = new Scanner(System.in); 
    while (! end) { 

     System.out.print(">>>"); 
     try{ 
      inputNu1 = input.nextDouble(); 
      operator = input.next().charAt(0); 
      inputNu2 = input.nextDouble(); 
      switch (operator){ 
      case '-': answer = action.Subtract(inputNu1, inputNu2); 
       break; 
      case '*': answer = action.Multiply(inputNu1, inputNu2); 
       break; 
      case '+': answer = action.Add(inputNu1, inputNu2); 
       break; 
      case '/': answer = action.Divide(inputNu1, inputNu2); 
       break;   
      } 

      System.out.println(answer); 

     }catch(InputMismatchException e){ 
      System.out.println(e.toString()); 
      System.out.println(input.next() + " IS INVALID INPUT"); 
     } 
    } 
    input.close(); 
    } 
} 

Для получения дополнительной информации об исключениях в Java - Catching and Handling Exceptions и Class InputMismatchException

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