反向抛光表示法的问题(Java)

时间:2011-01-19 01:51:55

标签: java

我发现的一个问题是我无法比较+, - ,*,/还有其他方法吗?谢谢你的帮助

CODE:

import java.util.Scanner;

public class Question2 {

    public static void main(String args[]){

    Scanner scan = new Scanner(System.in);

    double array[] = new double[20];

    System.out.print("Enter sum: ");
    String sum = scan.nextLine();

    getValue(sum, array, 0);

    System.out.print(array[0]);
    }


    public static void getValue(String input, double array[], int poi){
     int counter = 0;
     char nextValue = ' ';
     String value = "";
     double num = 0;
     boolean checkDub = true;

        do{
            value = value + input.charAt(counter);

            counter ++;     
            nextValue = input.charAt(counter);   
        }while(nextValue != ' ');

     try {num = Integer.parseInt(value);}
     catch (Exception e) {
      checkDub = false;

      double l2 = array[poi];
      poi--;

      double l1 = array[poi];

      if(value.equals("+")){ array[poi] =  l1 + l2;} // <--- comparing problem?
      else if(value.equals("-")){ array[poi] =  l1 - l2;}
      else if(value.equals("*")){ array[poi] =  l1 * l2;}
      else if(value.equals("/")){ array[poi] =  l1 / l2;}
      else{System.out.println("Error");}

    }
        if(checkDub = true){
        array[poi] = num;}

        String nextInput = input.substring(counter);
        getValue(nextInput, array, poi + 1);


    }

}

2 个答案:

答案 0 :(得分:1)

提示:

  1. 尝试在您认为存在比较问题的点时打印出value包含的内容。
  2. 尝试以OO方式解决问题;例如将getValue方法更改为非静态方法,并使用实例变量作为状态。
  3. 您无法使用=来比较值。请改用==a == true也相当于a

答案 1 :(得分:0)

非常确定你的问题是你没有剥离领先的太空人物。例如,如果输入为"2 2 + ",则在第三次调用的输入为" + ",并且值{得到{1}}。这与" +"的同等性检查失败了。与此同时,"+"高兴地剥离了前导空格。

您的代码也将抛出IndexOutOfBoundsException异常,如果您的输入不是一个空格终止。此外,你也不会像处理更复杂的表达式parseInt,因为你的的做评估后的第一个递归调用。 (提示:当您从输入中消耗掉所有令牌时,您应该返回。)

样式点(不是错误):你应该使用的indexOf找到空间(或者,甚至更好,分割)。递归尾调用应该是一个循环(对于很长的输入,可能会导致StackOverflowError)。您不需要布尔值checkDub - 而是可以将"1 2 + 3 +"的正文放在if (checkDub == true)内(try之后)。但是,如果你正在使用循环,你可能想要重构。