我正在创建一个我正在使用三个案例的stck。案例1正在添加数据,案例2正在弹出,案例3正在打印。
当我输入选项1并添加一些数据时,事情进展顺利。现在,当我弹出时,我正在
java.util.EmptyStackException
。如何过来。
如果我从其他方法创建Stack,那么事情正常。
这是我的代码。
import java.util.Iterator;
import java.util.Scanner;
import java.util.Stack;
public class SolutionStack {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i=0; i<n; i++){
int ch = sc.nextInt();
stackMethod(ch);
}
}
private static void stackMethod(int ch) {
// TODO Auto-generated method stub
Stack st = new Stack();
Scanner sc = new Scanner(System.in);
st.size();
System.out.println(st.size());
switch(ch){
case 1:
int num = sc.nextInt();
st.push(num);
break;
case 2:
st.pop();
break;
case 3 :
Iterator<Integer> iterator = st.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
}
答案 0 :(得分:1)
您每次都在for循环中创建一个堆栈。
在main函数中创建Stack并传入方法
Stack st = new Stack();
这将是方法签名。
private static void stackMethod( Stack st, int ch)
正确的解决方案是
import java.util.Iterator;
import java.util.Scanner;
import java.util.Stack;
public class SolutionStack {
public static void main(String[] args) {
// TODO Auto-generated method stub
Stack st = new Stack();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i=0; i<n; i++){
int ch = sc.nextInt();
stackMethod(st,ch);
}
}
private static void stackMethod(Stack st, int ch ) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
st.size();
System.out.println(st.size());
switch(ch){
case 1:
int num = sc.nextInt();
st.push(num);
break;
case 2:
st.pop();
break;
case 3 :
Iterator<Integer> iterator = st.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
}
答案 1 :(得分:0)
您的func animate()
{
var coordinateXLabel1:Int = 1
var coordinateYLabel1:Int = 1
var coordinateXLabel2:Int = 1
var coordinateYLabel2:Int = 1
func animateLabel1()
{
UIView.animate(withDuration: 1, animations: {
self.label1.center = CGPoint(x: coordinateXLabel1, y: coordinateYLabel1)
}, completion: {(finished:Bool) in
coordinateXLabel1 = Int(arc4random_uniform(324) + 25)
coordinateYLabel1 = Int(arc4random_uniform(560) + 111)
animateLabel1()
})
}
func animateLabel2()
{
UIView.animate(withDuration: 1, animations: {
self.label2.center = CGPoint(x: coordinateXLabel2, y: coordinateYLabel2)
}, completion: {(finished:Bool) in
coordinateXLabel2 = Int(arc4random_uniform(324) + 25)
coordinateYLabel2 = Int(arc4random_uniform(560) + 111)
animateLabel2()
})
}
animateLabel1()
animateLabel2()
}
是方法stack
中的局部变量,因此每次调用都会创建一个新的堆栈对象。
将stackMethod
作为类变量,它应该可以工作:
st