所以我正在研究一個PostFix計算器,它在命令行中用於類項目,而且我在爲它開發內存時遇到了一些麻煩。我被告知要創建一個hashMap,並且我已經研究了它並理解它的基礎知識。我有計算方法工作,但是我嘗試實現用戶聲明變量的方式時遇到了問題。例如該用戶應該能做什麼:如何在我的代碼中實現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
正如你可以看到,用戶可以申報格式變量「=」 我的問題是,我真的不知道如何實現HashMap中,我試圖通過從數組列表中獲取哈希映射的變量名,並通過從我的計算方法中獲取返回值來從中獲取整數值,但我得到的只是這個錯誤:
>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:42)
這裏是我的代碼目前:
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 = 0;
if (compute(a) != null)
{
pos = Integer.parseInt(compute(a));
}
memory.put(list.get(list.size()-1),pos);
}
}
public static String compute(String input)
{
List<String> processedList = new ArrayList<String>();
if (!input.isEmpty())
{
String myRegex = "[^a-zA-Z]";
StringTokenizer st = new StringTokenizer(input);
while (st.hasMoreTokens())
{
processedList.add(st.nextToken());
processedList.remove(myRegex);
processedList.remove("=");
}
}
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();
}
}
有誰知道我可以如何讓後期修復計算器上的哈希映射內存工作到用戶可以分配變量並能夠調用它們的位置,或者更好的方法來處理?
你究竟想把什麼放在散列表? – ryekayo 2015-04-03 15:06:56
我正在嘗試存儲用戶的答案。用戶能夠以「variable = value」的格式聲明他自己的變量類型,就像我上面顯示的那樣。但我堅持如何使這項工作 – Dayman 2015-04-03 15:15:16
你應該創建一個[MCVE](http://stackoverflow.com/help/mcve)。 – StackFlowed 2015-04-03 15:26:09