DaniWeb IT Discussion Community

DaniWeb IT Discussion Community (http://www.daniweb.com/forums/index.php)
-   Java (http://www.daniweb.com/forums/forum9.html)
-   -   i need help on stack. If pop: stack is empty. (http://www.daniweb.com/forums/thread167856.html)

BestJewSinceJC Jan 13th, 2009 4:18 pm
Re: i need help on stack. If pop: stack is empty.
 
Your code in "push" takes two arguments: An integer representing the index you're "pushing" the item onto, and the item that you want to push onto the stack. You got the Exception because you tried to push an item onto the stack at index = 3, but the array is too small; therefore, you can't push anything onto index 3 since it doesn't have 3 indexes.

Why do you need to give the 'push' method an index, anyway? Instead, you could have a variable 'currentSize' in the MStack class that keeps track of how large your stack is. Then, in your push() method, you'd just automatically add the new item onto the end and increment the 'currentSize' variable.

A possible problem: Since you are using an array, and not an Arraylist, you need to make sure that you allocate enough space (make the array big enough) to begin with. Otherwise, at some point, you might get an ArrayIndexOutOfBoundsException. If your array reaches it's maximum size (or at some point before it reaches its max size), you will have to make a new array which has a bigger size and copy the old one over to it. So somehow you're either not making your array big enough or you're calculating the wrong index (that you pass to the push method).

ezkonekgal Jan 14th, 2009 10:45 pm
Re: i need help on stack. If pop: stack is empty.
 
Quote:

Originally Posted by BestJewSinceJC (Post 777589)
Y

Why do you need to give the 'push' method an index, anyway? .

Because i was thinking that if the index is 1, then it would refer to the stack 1 and it would push the item in that stack.

BestJewSinceJC Jan 14th, 2009 11:14 pm
Re: i need help on stack. If pop: stack is empty.
 
So you have multiple stacks, then. What I said still applies... you're either not allocating enough space or you're trying to put something in the array at the wrong index. You might want to also check that you actually allocated the space to begin with and that the array isn't null.

ezkonekgal Jan 15th, 2009 7:53 am
Re: i need help on stack. If pop: stack is empty.
 
Quote:

Originally Posted by SamCris (Post 777009)
kung pwde k mgbisaya ok lng, pasabta lng ko sa T[] ug OldT[] ug nganong k2ng sa Fig 1.13 (page 35) sa JEDI course notes dili masabtan :(

Actually , i also didn't undertsand much about the T[] and oldT[] discussed int our lectures. As i know, T[] refers to the new tops that are computed using the garwick also in allocating memery. oldT[] will piont to the tops before the memory allocation happened.

ezkonekgal Jan 15th, 2009 8:26 am
Re: i need help on stack. If pop: stack is empty.
 
Quote:

Originally Posted by BestJewSinceJC (Post 778630)
So you have multiple stacks, then.

That's what im trying to do in the first place. :)

Quote:

Originally Posted by BestJewSinceJC (Post 778630)
What I said still applies... you're either not allocating enough space or you're trying to put something in the array at the wrong index. You might want to also check that you actually allocated the space to begin with and that the array isn't null.

i did this:
        public Node[] stack; // this is supposedly my array
              stack = new Node[size2]; // this is what i had to initialize the size of the stack, in which the user prompts.

how do i access each stack anyway? i had those T[] (top) and B[] (base pointer) to be able to keep track of the stack but i don't know how to use them to access the stack. Or do i use them to acces the stack?

I don't know if you had run my program. but if you could, or somebody else could, i'd appreciate it very much..

BestJewSinceJC Jan 15th, 2009 12:32 pm
Re: i need help on stack. If pop: stack is empty.
 
newNode.link = top;
top = newNode;


These lines of code don't make sense. Whatever the current 'top' Node is, you should be assigning it's 'next node' pointer to newNode. Since you're keeping it in an array, you could just drop the whole 'linked list' thing and put your stack in the array. It seems you are mixing concepts.

ezkonekgal Jan 16th, 2009 7:46 am
Re: i need help on stack. If pop: stack is empty.
 
Quote:

Originally Posted by BestJewSinceJC (Post 779066)
Since you're keeping it in an array, you could just drop the whole 'linked list' thing and put your stack in the array. It seems you are mixing concepts.

I can't do that, cause my job has to be linked list. :)
I'm pretty sure i am clear of what i want, but can't understand how to do it.. :|
thanks for your replies.

here's the edited code;


public class MStack implements Stack{

        public Node top;
        public Node[] stack;
        public int T[];
        public int B[];
        public  int oldT[];
        public static int i;
        int size2;
        int noOfStack2;


        class Node{
                Object info;
                Node link;
        }

        public MStack(){

        }

        public MStack(int size, int noOfStack){
                size2= size;
                noOfStack2 = noOfStack;
                stack = new Node[size2];
                T = new int[noOfStack2 + 1];
                B = new int[noOfStack2 + 1];
                oldT = new int[noOfStack2 + 1];
                for (int i = 0; i < noOfStack2; i++){
                        B[i]= (int)Math.floor(size2/noOfStack2) * i -1;
                        T[i] = B[i];
                        B[noOfStack2] = size2- 1;
                }B[noOfStack2] = size2 - 1;
        }

        public Object top(int i){
                return top.info;
        }

        public void push(String item,int i ) {
                if (T[i]== B[i+1]){
                                System.out.println("Stack"+ i + "is full.");
                }else{
                        stack[i] = new Node();
                        stack[i].info = item;
                        stack[i].link = top;
                        top =stack[i];
                        System.out.println("You have pushed " + item + " into stack!");
                        T[i]++;
                }
        }

        public Object pop(int i ){
                Node temp;
                if (isEmpty(i))
                        throw new StackException("Stack underflow.");
                        temp = top;
                        top = top.link;
                return temp.info;
        }

        public boolean isEmpty(int i){
                boolean ques = false;
                if(T[i] == B[i]){
                        ques = true;
                }
                return ques;

        }

        public int size(int i){
                int size[]= new int[i];
                size[i] = T[i] - B[i] ;
                return size[i];
        }

}

import java.io.*;

public class BookShelf extends MStack {

                public  InputStreamReader ir = new InputStreamReader(System.in);
                public  BufferedReader bf = new BufferedReader(ir);
                public  BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
                public  MStack bookShelf;
                public  int size;
                public  int shelf;

                public static void main (String []args) throws IOException{
                        new BookShelf();
                }

                public BookShelf()throws IOException{
                        super();
                        options();
                }

                public void options()throws IOException{
                        System.out.println("What size do you want your bookshelf to be?Integers only.:");
                        size =        Integer.parseInt(in.readLine());
                        System.out.println("How many shelves do you want your bookshelf to have?:");
                        shelf = Integer.parseInt(in.readLine());
                        bookShelf = new MStack(size, shelf);
                        System.out.println("You have now a book shelf with " +size+ " capacity and " +shelf+ " shelves" );
                        try{
                                do{
                                        System.out.println("\nPlease choose from below. Use numbers to choose.");
                                        System.out.println("1. Place book on shelf");
                                        System.out.println("2. Retrieve book from shelf");
                                        System.out.println("3. Show items on shelf");
                                        System.out.println("4. Exit");
                                        int choice = Integer.parseInt(in.readLine());
                                        if  (choice == 1){
                                                try{
                                                        System.out.println("Which shelf do you want to place a book?(Integers only");
                                                        int placement = Integer.parseInt(in.readLine());
                                                        int i;
                                                        if(placement == 1){
                                                                i = 0;
                                                                System.out.println("Enter element:");
                                                                String item = bf.readLine();
                                                                bookShelf.push(item,i);
                                                        }if(placement == 2){
                                                                i = 1;
                                                                System.out.println("Enter an element:");
                                                                String item = bf.readLine();
                                                                bookShelf.push(item,i);
                                                        }if(placement == 3){
                                                                i = 2;
                                                                System.out.println("Enter an element:");
                                                                String item = bf.readLine();

                                                                bookShelf.push(item,i);
                                                }
                                                }catch(ArrayIndexOutOfBoundsException e){

                                                        }
                                        }else if (choice == 2){
                                                System.out.println("Which shelf do you want to retrieve a book? Integers only.");
                                                int choice2 = Integer.parseInt(in.readLine());
                                                try{
                                                        switch (choice2){
                                                                case 1 : if (bookShelf.isEmpty(choice2)) {
                                                                                        System.out.println("Shelf is empty");
                                                                                        break;
                                                                                }else{
                                                                                        System.out.println("Item " + bookShelf.pop(choice2)+ " is retrieved.");
                                                                                        break;
                                                                                }
                                                                case 2 : if (bookShelf.isEmpty(choice2)) {
                                                                                        System.out.println("Shelf is empty");
                                                                                        break;
                                                                                }else{
                                                                                        System.out.println("Item " + bookShelf.pop(choice2)+ " is retrieved.");
                                                                                        break;
                                                                                }
                                                                case 3 : if (bookShelf.isEmpty(choice2)) {
                                                                                        System.out.println("Shelf is empty");
                                                                                        break;
                                                                                }else{
                                                                                        System.out.println("Item " + bookShelf.pop(choice2)+ " is retrieved.");
                                                                                        break;
                                                                                }
                                                                }
                                                }catch(NullPointerException e){

                                                }
                                        }else if (choice == 3){
                                                for (int i = 0; i <= shelf; ++i) {
                                                        if (!isEmpty(i)){
                                                                System.out.println("shelf #" + i + ": " + bookShelf.pop(i));
                                                        }else{
                                                                System.out.println("shelf #" + i + ": is empty.");
                                                                break;
                                                        }
                                                }

                                        }else if ( choice == 4){
                                                System.out.println("You have exited. Thank you!");
                                                break;
                                        }
                        }while (true);
                }catch(IOException e){}
        }


}

I can now push strings onto shelf , 2, and 3 BUT i think it is in a single stack.. :(


All times are GMT -4. The time now is 2:20 pm.

Forum system based on vBulletin Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
©2003 - 2009 DaniWeb® LLC