Общий метод со стеком - PullRequest
       7

Общий метод со стеком

0 голосов
/ 30 декабря 2018

мой код:

    public static void spilledOn (Stack<Object> st1,Stack<Object> st2){
    while (!st2.isEmpty()){
            st1.push(st2.pop());
    }    
}

public static int findLengthInStack (Stack<Object> st1){
    Stack<Object> tmp=new Stack<>();
    int count=0;
    while (tmp.isEmpty()){
        tmp.push(st1.pop());
        count++;
    }
    toolsForAnything.spilledOn(st1, tmp);
    return count;
}

, когда я вызываю этот метод и использую другой тип стека, он не работает (я имею в виду, я использую Stack<Integer>)У кого-нибудь есть решение для этого?(Я надеюсь, что это правильно, что я использую с объектом)

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Если вы действительно хотите по какой-то причине использовать этот алгоритм, то для общего Stack вам необходимо объявить параметр типа для каждого метода.

// (Really an API would be using super and extends here,
//   but let's keep it simple.)
public static <T> void spilledOn (Stack<T> st1,Stack<T> st2){
    //        ^^^                       ^            ^
[...]
// (I'm using a different name (E vs T) here
//     just to illustrate that I am declaring two variables.
//   Using the same letter would be more conventional.)
public static <E> int findLengthInStack (Stack<E> st1){
    //        ^^^                              ^
    Stack<E> tmp=new Stack<>();
    //    ^
0 голосов
/ 30 декабря 2018

Если вы хотите написать (ненужный) метод для определения количества элементов в стеке, вы можете сделать это следующим образом:

public class Helper {

    private static <T> int findSize(Stack<T> input) {
        return input.size();
    }

    public static void main(String[] args) {

        Stack<Integer> stack = new Stack<>();
        stack.push(4);
        stack.push(9);

        System.out.println(findSize(stack));

    }
}

Почему я сказал ненужный ?Потому что вы можете просто написать:

System.out.println(stack.size());

вместо:

System.out.println(findSize(stack));
...