有问题在hashmap中存储值

时间:2015-04-03 01:01:37

标签: java arraylist hashmap postfix-notation

好吧,我对java有点新手。我正在创建一个Postfix计算器,我正在尝试使用hashmap为它创建一个内存。用户应该能够分配他/她自己的变量,例如:

> a = 3 5 + 1 -
7
> bee = a 3 *
21
> a bee +
28
> bee 3 %
0
> a = 4
4
> 57
57
> 2 c +
c not found
> mem
a: 4
bee: 21
> exit

用户使用“var =”分配变量,稍后可以使用它来调用先前的答案。 我不能让我的计算方法忽略“a =”所以它返回一个错误,当我运行程序并尝试使用变量我得到错误

>Exception in thread "main" java.lang.NumberFormatException: For input string: "
 Error"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at Program6.main(Program6.java:38)

有一种很好的方法可以让我的计算方法忽略变量输入,并且有什么最好的方法来实现hashmap?我似乎陷入困境。到目前为止,这是我的代码

import java.util.*;
import java.io.*;
public class Program6
{
    private static HashMap<String,Integer> memory = new HashMap<>();
    public static void main(String args[])
    {
        System.out.println("Servando Hernandez");
        System.out.println("RPN command line calculator");
        Scanner scan = new Scanner(System.in);
        System.out.print(">");
        while(scan.hasNextLine())
        {
            System.out.print("> ");
            String a = scan.nextLine(); 
            String b = "quit";
            String c = "mem";
            String d = "clear";
            if(a.equals(b))
            { 
                System.exit(0);
            }
            else
            {
                System.out.println(compute(a));
            }
            System.out.print(">");

            List<String> list = new ArrayList<String>();
            if(!a.isEmpty())
            {
                StringTokenizer var = new StringTokenizer(a);
                while(var.hasMoreTokens())
                {
                    list.add(var.nextToken());
                }
            }
            int pos = Integer.parseInt(compute(a));



            memory.put(list.get(l.size()-1),pos);

        }   


    }



    public static String compute(String input)
    {
        List<String> processedList = new ArrayList<String>();
        if (!input.isEmpty()) 
        {
            StringTokenizer st = new StringTokenizer(input);
            while (st.hasMoreTokens())
            {
                processedList.add(st.nextToken());
            }
        } 
        else
        {
            return "Error";
        }
        Stack<String> tempList = new Stack<String>();

        Iterator<String> iter = processedList.iterator();

        while (iter.hasNext())
            {
                String temp = iter.next();
                if (temp.matches("[0-9]*"))
                    {

                    tempList.push(temp);
                    }
                    else if (temp.matches("[*-/+]")) 
                    {

                        if (temp.equals("*")) 
                        {
                            int rs = Integer.parseInt(tempList.pop());
                            int ls = Integer.parseInt(tempList.pop());
                            int result = ls * rs;
                            tempList.push("" + result);
                        } 
                        else if (temp.equals("-")) 
                        {
                            int rs = Integer.parseInt(tempList.pop());
                            int ls = Integer.parseInt(tempList.pop());
                            int result = ls - rs;
                            tempList.push("" + result);
                        } 
                        else if (temp.equals("/")) 
                        {
                            int rs = Integer.parseInt(tempList.pop());
                            int ls = Integer.parseInt(tempList.pop());
                            int result = ls / rs;
                            tempList.push("" + result);
                        } 
                        else if (temp.equals("+")) 
                        {
                            int rs = Integer.parseInt(tempList.pop());
                            int ls = Integer.parseInt(tempList.pop());
                            int result = ls + rs;
                            tempList.push("" + result);
                        }

                    }
                    else
                    {
                        return "Error";
                    }
            }

        return tempList.pop();
    }
}

1 个答案:

答案 0 :(得分:0)

我调试了你的代码,发现匹配方法出错了。

当您输入1+1之类的内容时,matches("[0-9]*")matches("[*-/+]")都返回 false ,因此代码条目为else分支return "Error";

并且,您将一个字符串“Error”放入Integer.parseInt(),因此它会抛出异常。

为了给我可怜的英语。