2010-05-12 3 views
0

현재 응용 프로그램에서 사용해야하는 Java Simple Calculator를 찾고 있습니다.무료 및 오픈 소스 (선호) 계산기

내가 Windows에서 오전, 난 그냥 그러나

Runtime.getRuntime().exec("calc"); 

를 사용하여 시작할 수, 리눅스에서 그렇게 할 휴대용 방법이 없습니다. 따라서, 나는 그러나, 그것은 부동 소수점이없는 내가 http://leepoint.net/notes-java/examples/components/calculator/calc.html

건너 온 윈도우

과 매우 유사 계산기를 제공해야합니다.

Windows와 비슷한 무료 Java 계산기가 있습니까?

+0

xcalc는 (는) 허용되지 않습니다. 나는 그것이 많은 리눅스 배포판에 있다고 생각한다. – MJB

+2

프로그래밍과 관련없는 것으로 투표를 종료합니다. – danben

답변

3

일반적으로 외부 (네이티브) 앱을 호출하는 것은 꽤 못생긴 것이므로 실제로 그렇게해야 할 필요가 없다면 피해야합니다. 유비쿼터스 Linux (및 OSX 등) 계산기가 있더라도 응용 프로그램은 자체 Java 기반 계산기를 제공하는 것이 좋으며 외부의 Java 기반 계산기를 사용하지 않고 걱정하지 않아도됩니다. 실행 경로 문제.

그걸로, 많은 Java 계산기가 Sourceforge에 있습니다. 여기에 세 가지 당신이 시작하는 데 있습니다

http://sourceforge.net/projects/jcalcadvance/

http://sourceforge.net/projects/jscicalc/

http://sourceforge.net/projects/jcalculator/

0

코드가 완료되지 않습니다, 부 그것은 당신에게

문자열 계산기 도움이 T :


수입 인 java.util.ArrayList를; import java.util.Stack;

/** * * @author 밀라 드 Hasanpour */

공공 최종 클래스 수학을 {

private String[] Split = {"0"}; 
private double a = 0, b = 1, answer; 
private double[] Numbers = {0}; 
public String print ,data; 

public String Maths(String data) { 
    this.data=data; 
} 

public String getAnswer(String data) { 
    print = "  {\n"; 
    return findBracketPos(data); 
} 


private String findBracketPos(String data) { 
    int pos = 0; 
    if (-1 != (pos = data.indexOf("("))) { 
     String subexp = extractFromBraces(data, pos); 
     print += "    " + data + "\n"; 
     data = data.replace("(" + subexp + ")", findBracketPos(subexp)); 
    } 
    print += "    " + data + "\n"; 
    return spliter(data, "\\+"); 
} 

private static String extractFromBraces(String data, int pos) {//bracket 
    int braceDepth = 1; 
    String subexp = ""; 
    for (int i = pos + 1; i < data.length(); i++) { 
     switch (data.charAt(i)) { 
      case '(': 
       braceDepth++; 
       subexp += "("; 
       break; 
      case ')': 
       if (--braceDepth != 0) { 
        subexp += ")"; 
       } 
       break; 
      default: 
       if (braceDepth > 0) { 
        subexp += data.charAt(i); 
       } 
     } 
     if (braceDepth == 0 && !subexp.equals("")) { 
      return subexp; 
     } 
    } 
    return "Failure!"; 
} 

private String spliter(String Datas, String Parameter) { 
    String[] Data = Datas.split(Parameter); 
    ArrayList<String> list = new ArrayList<>(); 
    for (String data : Data) { 
     try { 
      list.add(Solve(data, ParameterFinder(data))); 
     } catch (Exception e) { 
      switch (Parameter) { 
       case "\\+": 
        list.add(spliter(data, "-")); 
        break; 
       case "-": 
        list.add(spliter(data, "/")); 
        break; 
       case "/": 
        list.add(spliter(data, "\\*")); 
        break; 
       case "\\*": 
        list.add(spliter(data, "%")); 
        break; 
       case "%": 
        list.add(spliter(data, "\\^")); 
        break; 
       case "\\^": 
        list.add(Solve(data, "\\^")); 
        break; 
      } 
     } 
    } 
    String add = ""; 
    int l = 0; 
    while (l < list.size() - 1) { 
     add += list.get(l) + Parameter.replaceAll("\\\\", ""); 
     l++; 
    } 
    add += list.get(list.size() - 1); 
    return Solve(add, Parameter); 
} 

private String Solve(String data, String Parameter) { 
    if (isNumeric(data)) { 
     return data; 
    } 
    Numbers = castS_D(Split = data.split(Parameter)); 
    try { 
     a = Math.toRadians(Double.valueOf(Split[1])); 
    } catch (NumberFormatException e) { 
     a = 1; 
    } 
    try { 
     b = Double.valueOf(Split[0]); 
    } catch (NumberFormatException e) { 
     b = 1; 
    } 
    switch (Parameter) { 
     case "\\+": 
      answer = 0; 
      for (double Num : Numbers) { 
       answer += Num; 
      } 
      break; 
     case "-": 
      if (Numbers.length == 1) { 
       return Numbers[0] + ""; 
      } 
      int i = 1; 
      if ((answer = Numbers[0]) == 0) { 
       answer = Numbers[1]; 
       i = 2; 
      } 
      for (int j = i; j < Numbers.length; j++) { 
       answer -= Numbers[i]; 

      } 
      break; 
     case "\\*": 
      answer = 1; 
      for (double Num : Numbers) { 
       answer *= Num; 
      } 
      break; 
     case "/": 
      answer = Numbers[0]; 
      for (int j = 1; j < Numbers.length; j++) { 
       if (Numbers.length > 1) { 
        answer /= Numbers[j]; 
       } 
      } 
      break; 
     case "%": 
      answer = 100; 
      for (double Num : Numbers) { 
       answer = Num * (answer/100); 
      } 
      break; 
     case "\\^": 
      answer = Numbers[Numbers.length - 1]; 
      for (int j = Numbers.length - 2; j > -1; j--) { 
       if (Numbers.length > 1) { 
        answer = Math.pow(Numbers[j], answer); 
       } 
      } 
      break; 
     case "v": 
      answer = b * Math.sqrt(Numbers[1]); 
      break; 
     case "pi": 
      answer = Math.PI; 
      break; 
     case "ei": 
      answer = Math.E; 
      break; 
     case "sin": 
      answer = b * Math.sin(a); 
      break; 
     case "cos": 
      answer = b * Math.cos(a); 
      break; 
     case "tan": 
      answer = b * Math.tan(a); 
      break; 
     case "cot": 
      answer = b * (1/Math.tan(a)); 
      break; 
     case "sinh": 
      answer = b * Math.sinh(a); 
      break; 
     case "cosh": 
      answer = b * Math.cosh(a); 
      break; 
     case "tanh": 
      answer = b * Math.tanh(a); 
      break; 
     case "coth": 
      answer = b * (1/Math.tanh(a)); 
      break; 
     case "asin": 
      answer = b * Math.asin(a); 
      break; 
     case "atan": 
      answer = b * Math.atan(a); 
      break; 
     case "acos": 
      answer = b; 
      break; 
     case "acot": 
      answer = b * (1/Math.atan(a)); 
      break; 
     case "sec": 
      answer = b * (Math.sqrt(Math.pow(Math.tan(a) + 1, 2))); 
      break; 
     case "exp": 
      answer = b * Math.exp(Math.toDegrees(a)); 
      break; 
     case "abs": 
      answer = b * Math.abs(Math.toDegrees(a)); 
      break; 
     case "atann": 
      answer = Math.atan2(Math.toRadians(b), a); 
      break; 
     case "cbrt": 
      answer = b * Math.cbrt(a); 
      break; 
     case "ceil": 
      answer = b * Math.ceil(a); 
      break; 
     case "hypot": 
      answer = Math.hypot(b, Math.toDegrees(a)); 
      break; 
     case "rad": 
      answer = b * a; 
      break; 
     case "deg": 
      answer = b * Math.toDegrees(Math.toDegrees(a)); 
      break; 
     case "rou": 
      answer = b * Math.round(Math.toDegrees(a)); 
      break; 
     case "ran": 
      answer = b * Math.random() * Math.toDegrees(a); 
      break; 
     case "ln": 
      answer = b * Math.log(Math.toDegrees(a)); 
      break; 
     case "log": 
      answer = b * Math.log10(Math.toDegrees(a)); 
      break; 
     case "~": 
      answer = b * Math.pow(10, Math.toDegrees(a)); 
      break; 
    } 
    return answer + ""; 
} 

private double[] castS_D(String[] Split) { 
    int i = 0; 
    if (Split[0].isEmpty() || Split[0].contains("�")) { 
     i = 1; 
    } 
    Numbers = new double[Split.length]; 
    for (int j = i; j < Split.length; j++) { 
     Numbers[j] = Double.valueOf(Split[j]); 
    } 
    return Numbers; 
} 

private String ParameterFinder(String Data) { 
    String[] data = {"+", "-", "*", "/", "^", "v", "sin", "cos", "tan", "cot", "sinh", "cosh", "tanh", "coth", "asin", "atan", "sec", "?", "int", "%", "exp", "abs", "atann", "cbrt", "hypot", "rad", "deg", "rou", "ran", "ln", "log", "plot", "pi", "ei", "~"}; 
    String find = ""; 
    for (String data1 : data) { 
     if (Data.contains(data[0]) || Data.contains(data[2]) || Data.contains(data[4])) { 
      find = "\\" + data1; 
     } 
     if (Data.contains(data1)) { 
      find = data1; 
     } 
    } 
    return find; 
} 

private boolean isNumeric(String minData) { 
    try { 
     Double D = Double.valueOf(minData); 
    } catch (NumberFormatException e) { 
     return false; 
    } 
    return true; 
} 

}

  • System.out.print (새 수학 (죄 (tan (cot (90))))));
관련 문제