我几乎是java的初学者,即使在谷歌搜索之后我也无法弄清楚如何做到这一点。 所以,我正在制作一个基本的计算器,它将从用户那里得到一个字符串,并存储它的值......(我甚至不知道如何解释这个) 例如:用户的输入是“5 + 3-6 * 2”...我想在列表中存储5,3,6和2,并按照它们的顺序存储在另一个中的操作符号键入...(然后我将尝试按顺序执行操作,但这不是这个问题)。 我怎么能这样做?
答案 0 :(得分:0)
ArrayList<Character> nums = new ArrayList<>();
ArrayList<Character> ops = new ArrayList<>();
for (int i = 0; i < expression.length(); ++i) {
char c = expression.charAt(i);
if (c >= '0' && c <= '9') nums.add(c);
else ops.add(c);
}
任何更复杂的事情,你需要调查解析器或正则表达式
我还想指出,假设每个数字都是1位数,如您的示例所示。
答案 1 :(得分:0)
这是一个解决问题的简单方法,在我将数字和运算符分成两个列表之后,我使用了一个列表来存储每个东西
size - 1
是数字就是这样
这应该可以帮到你:
public static void main(String args[]) {
String operation = "55*6-66-33+15/99";
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < operation.length(); i++) {
if (!list.isEmpty()) {
if (operation.charAt(i) >= '0' && operation.charAt(i) <= '9') {
String str = list.get(list.size() - 1);
if (testInteger(str)) {
int d = Integer.parseInt(str);
int d2 = Integer.parseInt(operation.charAt(i) + "");
String s = (d * 10 + d2) + "";
list.set(list.size() - 1, s);
} else {
list.add(operation.charAt(i) + "");
}
} else {
list.add(operation.charAt(i) + "");
}
} else {
list.add(operation.charAt(i) + "");
}
}
现在,您可以在两个列表中分隔您的号码和操作
List<Integer> listNumber = new ArrayList<>();
List<String> listOperation = new ArrayList<>();
for (String s : list) {
if (testInteger(s)) {
listNumber.add(Integer.parseInt(s));
} else {
listOperation.add(s);
}
}
System.out.println(listNumber);
System.out.println(listOperation);
}
如果聊天是数字,则此方法测试:
private static boolean testInteger(String str) {
try {
int d = Integer.parseInt(str);
} catch (NumberFormatException e) {
return false;
}
return true;
}
结果应该是这样的:
Principal list = [55, *, 6, -, 66, -, 33, +, 15, /, 99]
List of numbers = [55, 6, 66, 33, 15, 99]
List of operations = [*, -, -, +, /]
如果您愿意,可以最小化代码,但这可以给您提供想法。