所以我有一个自己建立的Stack,还有一台机器来评估(9 + 0)这样的表达式,它们可能会更复杂。我在命令行上运行它,然后当我键入示例(9 +
5)时,程序就坐在那里。我可以换行,但表达式不求值。所以我的问题是我想念了什么。我敢肯定有些事情我没有正确理解,并且我一直在想我总体上缺少有关Scanner或Java数组的一些知识。
也许我昨晚在想,我应该用ArrayList替换数组。这有意义吗?
这是固定容量堆栈
public class FCStack<Item> {
private Item[] a;
private int top; // pointer to top of Stack
private int capacity; // size of the Stack+1
public FCStack(int cap){
capacity = cap;
a = (Item[]) new Object[capacity];
top = 0;
}
public void push(Item i){ //will only push an Item to the Stack if there is room.
if (!isFull()) {
a[top++] = i;
}
}
public Item pop(){ //will only pop an Item from the stack if there is something to pop.
if (!isEmpty()) {
--top;
}
return a[top];
}
public boolean isFull(){ //returns true if is full
return top == capacity;
}
public boolean isEmpty(){ //returns true if is empty
return top == 0;
}
public int size(){ //returns the current size of the stack+1 or the array index
return top;
}
}
这是两个堆栈的评估器
import java.io.*;
import java.util.Scanner;
public class TwoStackMaths {
public static void main (String[] args) {
FCStack<String> ops = new FCStack<String>(10);
FCStack<Double> vals = new FCStack<Double>(10);
Scanner console = new Scanner(System.in);
while(console.hasNext()) {
String str = console.next();
if (str.equals("("))
;
else if (str.equals("+")) {
ops.push(str);
}
else if (str.equals("-")) {
ops.push(str);
}
else if (str.equals("*")) {
ops.push(str);
}
else if (str.equals("/")) {
ops.push(str);
}
else if (str.equals("^")) {
ops.push(str);
}
else if (str.equals(")")) {
String op = ops.pop();
double v = vals.pop();
if (op.equals("+")) {
v = vals.pop() + v;
}
else if (op.equals("-")) {
v = vals.pop() - v;
}
else if (op.equals("*")) {
v = vals.pop() * v;
}
else if (op.equals("/")) {
v = vals.pop() / v;
}
else if (op.equals("^")) {
v = Math.pow(v, vals.pop());
}
vals.push(v);
}
else {
vals.push(Double.parseDouble(str));
}
}
//console.close();
System.out.println(vals.pop());
}
}
您的代码对我有用;我确实将其更改为使用ArrayList,并添加了一个peek
类似的内容
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class FCStack<T> {
public static void main(String[] args) {
FCStack<String> ops = new FCStack<String>(10);
FCStack<Double> vals = new FCStack<Double>(10);
Scanner console = new Scanner(System.in);
try {
while (console.hasNext()) {
String str = console.next().trim();
if (str.equals(".")) {
System.out.println(vals.peek());
} else if (str.equals("(")) {
;
} else if (str.equals("+")) {
ops.push(str);
} else if (str.equals("-")) {
ops.push(str);
} else if (str.equals("*")) {
ops.push(str);
} else if (str.equals("/")) {
ops.push(str);
} else if (str.equals("^")) {
ops.push(str);
} else if (str.equals(")")) {
String op = ops.pop();
double v = vals.pop();
if (op.equals("+")) {
v = vals.pop() + v;
} else if (op.equals("-")) {
v = vals.pop() - v;
} else if (op.equals("*")) {
v = vals.pop() * v;
} else if (op.equals("/")) {
v = vals.pop() / v;
} else if (op.equals("^")) {
v = Math.pow(v, vals.pop());
}
vals.push(v);
} else {
vals.push(Double.parseDouble(str));
}
}
} finally {
console.close();
}
}
private List<T> a;
private int top; // pointer to top of FCStack
private int capacity; // size of the FCStack+1
public FCStack(int cap) {
capacity = cap;
a = new ArrayList<T>();
top = 0;
}
public void push(T i) { // will only push an Item to
// the FCStack if there is room.
if (!isFull()) {
a.add(i);
++top;
}
}
public T pop() { // will only pop an Item from the
// stack if there is something to pop.
if (!isEmpty()) {
return a.remove(--top);
}
return null;
}
public T peek() {
if (!isEmpty()) {
return a.get(top - 1);
}
return null;
}
public boolean isFull() { // returns true if is full
return top > capacity;
}
public boolean isEmpty() { // returns true if is empty
return top == 0;
}
public int size() { // returns the current size of the
// stack+1 or the array index
return top;
}
}
像这样测试
( 12.0 * 3.0 ) .
36.0
嗨,伙计们,我在做零碎交易时有点困惑。以下是细节。 我有四个片段,A,B,C,D。 我所做的是: 第一个A(替换) A-- B... C-- 现在,当我在片段D中并按下back按钮时,当我按下hardware back键时,导航将跟随这里。 D-- 即使我将片段C添加到后堆栈中,我也不知道它已经到哪里去了 请帮我做这个。 这里是我整个演示项目的链接
有时,在我用Selenium2.41完成的测试中,在Firefox28测试中,执行挂起等待页面加载。 还要设置以下属性:
我尝试使用Android导航组件,但后堆栈有问题。 我有片段A,B。要从A导航到B,我写下: 但我如何才能返回到点击的返回按钮?
我正在使用discordpy编写一个discord测验机器人。机器人发送一条包含问题和4个可能答案的消息。机器人还使用表情符号1为其信息添加反应️⃣, 2.️⃣, 3.️⃣ 四,️⃣. 这个想法是,机器人等待30秒,让人们点击其中一个反应。如果单击的反应是正确/错误的答案,则bot会回答正确或错误。一旦有人回答,机器人也应该停止等待新的反应。Aka:一旦有人点击了4个反应表情中的一个,机器人就会回
我有一个工作应用程序,但我想改进一点。方法(“private fun save”),负责保存我需要的信息,我希望使其异步。 但问题是,当我把它改成——“私有挂起fun save”的时候,我要做suspend和override fun拦截方法。但是由于它被覆盖,我得到一个错误: 冲突重载:public open suspend fun intercept(链:Interceptor.chain):c
我从sqlite数据库中获取一些数据,在添加order by子句之前,我的查询工作正常 我的查询结构如下 选择*从测试,其中测试像'%test%'COLLATE NOCASE LIMIT 100 OFFSET 0 这运行得很好,我在数据库的前100行获得了包含单词test的所有记录,但是当我以这种方式添加ORDER BY子句时 选择*从TESTI,其中TESTO喜欢'%test%'COLLATE