如何在程序中使用命令行中的数学运算符?

时间:2016-04-05 08:23:47

标签: java

我尝试在命令行的args中计算数字(在我的计算器中)。例如:

args[0] = 2*3;
String result = method(args[0]);
System.out.println(result) // should be 6

我不知道如何在两位数字“+”,“ - ”之间使用我的字符。我不能使用循环。我的方法思路是使用 charAt ,如:

char a = arg.charAt(0);
char b = arg.charAt(1);
char c = arg.charAt(2);

但我不知道要改变我的b char(*)来进行计算。

3 个答案:

答案 0 :(得分:1)

您没有正确传递值。你的输入是一个字符串,对吗?您的代码显示整数表达式。

args[0] = "2*3"; //note that this changed to a string
double result = parse(args[0]);
System.out.println(result) // should be 6

然后你可以用你的方法解析你的字符串:

double parse(String str){
  int num1 = Integer.valueOf(str.substring(0,1));
  char operator = str.charAt(1);
  int num2 = Integer.valueOf(str.substring(2,3));
  switch(operator){
    case '+': return num1+num2;
    case '-': return num1-num2;
    case '*': return num1*num2;
    case '/': return num1/num2;
    default: throw new IllegalArgumentException();
  }
}

使用我的代码运行System.out.println(parse("2*3"));打印6.0

当然这只适用于只有一位数的操作数。但这是来自charAt想法的限制。

答案 1 :(得分:0)

我通常不会使用JAVA,但是..

如果你运行这样的过程,你将把输入作为一个字符串:

> MyCalculator 2*3

现在,您想将此字符串分为三个部分: Number1, Operation, Number2 为此,您可以执行以下操作:

String[] parts = args[0].split("\\*");
Double Number1 = Double.parseDouble( parts[0])
Double Number2 = Double.parseDouble( parts[1])

现在,您可能会注意到您将错过运营商.. 所以你想找到它并获取它,或者你可以这样做:

if( args[0].indexOf("*") > -1)
{
    System.out.println(Number1  * Number2);
}

编辑: 为了获得更多灵活性,您可能希望以相反的方式实现:

if( args[0].indexOf("*") > -1)
{
    String[] parts = args[0].split("\\*");
    Double Number1 = Double.parseDouble( parts[0])
    Double Number2 = Double.parseDouble( parts[1])
    System.out.println(Number1  * Number2);
}

if( args[0].indexOf("/") > -1)
{
    String[] parts = args[0].split("/");
    Double Number1 = Double.parseDouble( parts[0])
    Double Number2 = Double.parseDouble( parts[1])
    System.out.println(Number1  / Number2);
}

等...

注意“ - ”会特别烦人

答案 2 :(得分:0)

它不是最好的解决方案,但它有效,你可以输入任意长度的数字。

String[] number = args[0].split("[*]|[/]|[+]|[-]");
int stringLength = args[0].length();
int operatorBeginning = number[0].length();
int operatorEnd = stringLength - number[1].length();
String operator = args[0].substring(operatorBeginning,operatorEnd);

double answer = 0;

switch(operator) {
     case "*":
          answer = Integer.valueOf(number[0]) * Integer.valueOf(number[1]);
          break;
     case "/":
          answer = Integer.valueOf(number[0]) / Integer.valueOf(number[1]);
          break;
     case "+":
          answer = Integer.valueOf(number[0]) + Integer.valueOf(number[1]);
          break;
     case "-":
          answer = Integer.valueOf(number[0]) - Integer.valueOf(number[1]);
          break;
     default:
          System.out.println("Wrong operator");
          break;
}

System.out.println(answer);