有没有办法创建Java Util堆栈的固定堆栈大小

时间:2017-08-16 07:26:18

标签: java data-structures

我正在创建一个我正在使用三个案例的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());
            }
        }

    }
}

2 个答案:

答案 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