2015-10-06 58 views
0

我正嘗試在Java中創建計算器。 這裏是我的代碼:試圖在Java中創建計算器

import java.util.Scanner; 


public class Calculator { 

    public static void main (String[] args) throws java.lang.Exception{ 

     Calculator.Calculating(); 

    } 

    public static void Calculating() { 

     String usersCalc; 

     Scanner userInput = new Scanner(System.in); 
     System.out.println("Enter your calculation: "); 
     usersCalc = userInput.next(); 

     //splits when sees plus 
     String[] parts = usersCalc.split("+"); 

     //everything left to splitter 
     String part1 = parts[0]; 
     //everything right to splitter 
     String part2 = parts[1]; 
     int result; 

     int answerOne = Integer.parseInt(part1); 
     int answerTwo = Integer.parseInt(part2); 

     switch (usersCalc){ 
     case '+': 
      result = answerOne + answerTwo; 
      break; 
     case '-': 
      result = part1 - part2; 
      break; 
     case '/': 
      result = part1/part2; 
      break; 
     case'*': 
      result = part1 * part2; 
      break; 
     } 
    } 
} 

我試圖讓用戶輸入一個字符串,如「2 + 2」做到這一點,然後我把它分解的符號,然後把它通過一個switch語句,它爲我計算它。但是代碼仍然存在我無法解決的錯誤。 有什麼想法?

errors 無法爲低於1.7的源級別開啓String類型的值。只允許使用可變換的int值或枚舉變量

+0

**但是代碼仍然有錯誤**親切提及他們的問題。 –

+0

嗨,Obese,正如Naman提到的那樣,請寫下你得到的錯誤。 – kinshuk4

+0

更新了有錯誤的問題 –

回答

2

使用contains()檢查它是否爲+,-,*/。然後分割並計算它。

0

因爲usersCalc是一個字符串代替「+」

0

這是java的採訪中常見的任務,以便使用"+":「計算從字符串表達式的值」

這裏是算法(僞):

  1. 檢查表達式是有效的

  2. 打造你結構,兩種類型的節點 - 數學OPERAT離子和數量

  3. 遞歸計算結果

+1

你的意思是 –

+0

@BenKnoble是的。謝謝 – nikopol86

0

你的代碼有許多錯誤:

  1. 在開關的情況下不使用正確的數據進行計算。使用part1part2而不是answerOneanswerTwoInteger值。
  2. 您在switch中通過String並且使用char代替case statements
  3. 對於劃分,你應該檢查第二個值不是零。否則它會在運行時拋出異常。

您可以使用regex來分割輸入。然後找到operator並將其傳遞給switch-statement

import java.util.Scanner; 

public class Calculator { 

    public static void main (String[] args) throws java.lang.Exception{ 

    Calculator.Calculating(); 

    } 

    public static void Calculating() { 

    String usersCalc; 

    Scanner userInput = new Scanner(System.in); 
    System.out.println("Enter your calculation: "); 
    usersCalc = userInput.next(); 

    //splits when sees plus 
    String[] parts = usersCalc.split("[+-/*]"); 

    char operator = usersCalc.contains("+") ? '+' : usersCalc.contains("-") ? '-' : usersCalc.contains("*") ? '*' : '/'; 

    //everything left to splitter 
    String part1 = parts[0]; 
    //everything right to splitter 
    String part2 = parts[1]; 
    int result = -1; 

    int answerOne = Integer.parseInt(part1); 
    int answerTwo = Integer.parseInt(part2); 

    switch (operator){ 
     case '+': 
     result = answerOne + answerTwo; 
     break; 
     case '-': 
     result = answerOne - answerTwo; 
     break; 
     case '/': 
     if (answerTwo == 0) { 
      System.out.println("Invalid input."); 
      return; 
     } 
     result = answerOne/answerTwo; 
     break; 
     case'*': 
     result = answerOne * answerTwo; 
     break; 
    } 
    System.out.println(result); 
    } 
} 
0
  1. 通過檢查所有可能的運營商

    String[] parts = usersCalc.split("[+,-,*,/]"); 
    
  2. 檢查,如果userCalc包含運營商,做同樣類似

    if (usersCalc.contains("+")) 
        result = answerOne + answerTwo; 
    else if (usersCalc.contains("-")) 
        result = answerOne - answerTwo; 
    ...... 
    
0

你的錯誤是分割字符串因爲你試圖編譯與版本< 1.7(從你的錯誤猜測)。 要使用開關字符串,你至少需要1.7。

這不會解決您的所有問題,因爲其他答案提到它,您在switch和char中使用String。

而且即使有switch語句,它不會在「usersCalc」,因爲工作仍然是完整的計算(例如2 + 2),而不是隻是「+」