如何创建一个检测字符串中的因子并将其转换为浮点数的函数?

问题描述 投票:0回答:1

在我的任务中,我的代码必须能够加,减,除和乘。大多数工作都是在老师的帮助下完成的,但我无法弄清楚,我应该如何使它能够成倍增加。

我假设我需要创建一个新函数来搜索我的字符串中的因子,然后让它创建一个子字符串。

我已经尝试通过在第21行和第31行中添加相同的函数来扩展已经编写的代码,但这不起作用。

public static int resultat;
  public static String stykket = "3+9-22+35*2";

  public static void main (String[] args)  {

    while (!taltjek(stykket)){
      stykket = findled(stykket);
    }
    if (taltjek(stykket)){

        int tal = StrToInt(stykket);
        stykket = "";
        resultat += tal;
        println(resultat);
      }
    }
    public static String findled(String stykket){

      int tal;
      for(int i = stykket.length() - 1; i > 0;i--){
        if ((stykket.charAt(i) =='+')||(stykket.charAt(i) == '-')||(stykket.charAt(i) == '*')) {
          String strengtal = stykket.substring(i+1, stykket.length());
          tal = StrToInt(strengtal);

          char test = stykket.charAt(i);
          switch(test){
            case '+': resultat += tal;
            break;
            case '-': resultat -= tal;
            break;
            case '*': resultat *= tal;
            break;
          }
          stykket = stykket.substring(0,i);
          i = stykket.length();
        }
      }
      return stykket;
    }

    public static int StrToInt(String subString) {
      int resultat;
      resultat = 0;
      try {
        resultat = Integer.valueOf(subString);
      } catch (NumberFormatException e) {
        println("Det der er ikke et tal");
      }
      return resultat;
    }
    public static boolean taltjek (String subString){
      int resultat = 0;
      try {
        resultat = Integer.valueOf(subString);
      } catch (NumberFormatException e)  {
        return false;
      }
      return true;
    }

我预计输出为60,但输出为25。

java processing
1个回答
0
投票

代码从右到左评估字符串。只要遇到运算符,它就会解析运算符右边的子串,并将该运算应用于变量“resultat”。

resultat没有初始化,所以它将是0。如果第一个操作是乘法,它将保持0,因为x*0=0

如果我为i循环的每次迭代打印resultatfor,这是输出(加上我的评论)

10: 0     // input: 2     resultat = 0
 9: 0     // input: *2    resultat *= 2  =>  0
 8: 0     // input: 5
 7: 0     // input: 35
 6: 35    // input: +35   resultat += 35 => 35
 5: 35    // input: 2
 4: 35    // input: 22
 3: 13    // input: -22   resultat -= 22 => 13
 2: 13    // input: 9
 1: 22    // input: +9    resultat +=  9 => 22
25        // in your main method: resultat += 3 => 25

所以你的代码真正评估的是0*2+35-22+9+3

我对修复的建议是:

  1. 从左到右进行评估
  2. 使用第一个运算符之前的值初始化resultat

我不知道你的代码的要求是什么,但恕我直言,表达式评估器的更好的方法是使用递归方法。代码更简单(在我看来),你可以更容易地实现运算符优先级。

© www.soinside.com 2019 - 2024. All rights reserved.