2014-10-20 70 views
1

我正在尋找如何使我的程序正確運行的答案。我想我的程序能夠識別增加了一倍其他的事情---比如,如果我放在IDK的它會說,這不是一個數量,而不是崩潰。驗證基本計算器程序中的輸入

我的代碼:

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中的異常是如何工作的嗎?或者,Scanner有一個名爲'hasNextDouble()'的方法:http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#hasNextDouble() – thatidiotguy 2014-10-20 16:57:09

+0

我不知道你的意思當你說「例外」時。當我根據預期將雙打輸入時,沒有問題,但是字母會使它崩潰。我正在考慮使用Do While語句。這是否有意義? – Integral 2014-10-20 17:02:58

回答

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'),你不應該捕獲泛化的'Exception'。 – thatidiotguy 2014-10-20 17:03:56

+0

但是,如何將其放置在我擁有的代碼中? – Integral 2014-10-20 17:06:17

+0

使轉換的代碼應該被try {...} catch包圍。快速瀏覽我的帖子中的鏈接:-) – arutaku 2014-10-20 17:08:08

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

這裏的主要思想是找到掃描拋出時檢索到的令牌不符合預期的類型除外。如果在代碼中輸入錯誤的輸入,則會在控制檯中看到java.util.InputMismatchException。因此,我們可以使用try{....}catch(java.util.InputMismatchException e){....}來捕獲此特定異常並添加一些用戶定義的操作。

我編輯了你的計算器主類,現在如果你輸入的輸入不能被解析爲雙倍,控制檯會輸出一個警告並提示你再次輸入新的輸入。

 
**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 ExceptionsClass InputMismatchException