Итак, я работаю над калькулятором 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
Как вы можете видеть, пользователь может объявить переменные в формате «=» Моя проблема в том, что я не совсем уверен, как реализовать Hashmap , Я попытался сделать это, установив имя переменной для 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();
}
}
Кто-нибудь знает, как я могу сделать память hashMap на калькуляторе пост-исправления работающим там, где пользователь может назначать переменные и иметь возможность их перезвонить, или лучший способ приблизиться к этому?
Что именно вы пытаетесь установить в hashmap? – ryekayo
Я пытаюсь сохранить ответы пользователей. Пользователь может объявить свою собственную переменную вроде того, что я показал выше в формате «variable = value». Но я зациклился на том, как сделать эту работу. – Dayman
Вам следует создать [MCVE] (http://stackoverflow.com/help/mcve). – StackFlowed