如何使用hashmap为计算器创建内存?

时间:2015-04-01 17:52:28

标签: java arraylist hashmap calculator stringtokenizer

好的,我正在用Java构建一个简单的PostFix计算器,我被要求为它创建一些函数,我正在努力的是内存。我听说你可以用HashMap做到这一点,我对它进行了研究,但我不认为我完全理解如何将它实现到我的程序中。程序将起作用的方式是用户将启动它,它会说它是一个postFix计算器,并将提示输入如下:

java PostfixCalc
Integer Postfix calculator with memory
>

但是他可以选择为他的输入分配一个变量,例如:

> 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

到目前为止,这是我的代码。我想我应该将输入标记为输入并将其放在数组列表中以获取变量名称,除非有更好的方法。

import java.util.*;
import java.io.*;
public class Program6
{
    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(">");
          } 
      }



      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();
        }
      }


     private static String HashMap(String q)
     {
         List<String> memory = new ArrayList<String>();
         if(!q.isEmpty())
         {
             StringTokenizer var = new StringTokenizer(q);
             while(q.hasMoreTokens())
             {
                  memory.add(q.nextToken());
             }
         }


           HashMap h = new HashMap();
     }

 }//end of class

1 个答案:

答案 0 :(得分:1)

我认为内存的哈希映射的想法是你要插入键值对,其中键是变量名(String),值是变量的值(整数)。

例如,在评估a = 3 5 + 1 -之后,您会将("a", 7)添加到您的内存哈希映射中。然后,当您想要评估bee = a 3 *时,您可以在hashmap中查找a的值,该值为7,然后使用该值进行计算。在计算之后,您可以将("bee", 21)添加到内存哈希映射中。

就这样。