-1

到目前为止,我有这段代码可以解析两个不同的字符串将操作数转换为双精度并将它们相加

如何修改它以便它可以添加任意数量的字符串操作数?

double addMultipleDigits(String exp)
    {
        ArrayList<Double> wholeExpression  = new ArrayList<Double>();
        double answer = 0;
        for(int i=0;i<exp.length();i++)
        {
          if(exp.charAt(i)=='+')
          {
            answer=Integer.parseInt(exp.substring(i-1, i)) + Integer.parseInt(exp.substring(i+1, i+2));
            wholeExpression.add(answer);
            System.out.println(wholeExpression.get(0));

          }         
        }
        return answer;
    }
4

5 回答 5

8

更改签名以添加可变参数。

double addMultipleDigits(String... exp)

它可以在方法的主体中作为字符串数组进行处理。

于 2013-05-23T17:32:43.133 回答
6

看起来你想要varargs

double addMultipleDigits(String... expressions)

这里的expressions参数只是一个普通的数组,所以你仍然可以使用.length等。

然后你可以用一个数组显式调用它,或者只用几个参数:

addMultipleDigits("123", "456");
于 2013-05-23T17:33:12.787 回答
2

如果没有正确的理论基础,就不能解析和评估表达式(我从没想过我会这么说)。您需要了解词法分析器和解析器,以及它们是如何工作的。从输入生成解析树后,您可以评估它,或内联评估它。

于 2013-05-23T17:42:26.663 回答
1

所有答案都说明了使用可变数量争论的正确信息。但是根据您的评论,您似乎希望将参数放在单个字符串中,例如 1+5+10。

如果您使用可变参数会更好,但您必须使用单个字符串,然后您可以使用StringTokenizer。例如

     StringTokenizer st = new StringTokenizer("1+2+3","+");
     while (st.hasMoreTokens()) {
         String s = st.nextToken(); // s is the separated string.
     }
于 2013-05-23T17:44:19.490 回答
0

您可以在此处找到更多信息varargs

 void foo(String... args) 
 {
    for (String s : args) 
    {
        System.out.print(s);
    }
 }
于 2013-05-23T17:37:04.763 回答