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)

ezkonekgal Jan 12th, 2009 9:09 am
i need help on stack. If pop: stack is empty.
 
hello.. i really need help.. I don't know why i keep on getting an empty stack if i pop a token from stack even if user has already push a token into it..

public class MStack implements Stack{

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


        class Node{
                Object info;
                Node link;
        }

        public MStack(){

        }

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

        public Object top(int i){
                if (isEmpty(i)){
                        System.out.println("Stack empty.");
                }return top.info;
        }

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

        public Object pop(int i ){
                Node temp[] = new Node[noOfStack];
                if (isEmpty(i)){
                        System.out.println("Stack has nothing inside it");
                }
                temp[i] = top;
                top = top.link;
                return temp[i].info;
        }

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

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

this is another class. This has the main type:

import java.io.*;

public class BookShelf extends MStack {

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

                public static void main (String []args) throws IOException{
                        System.out.println("What size do you want your bookshelf to be?(integer):");
                        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);

                        new BookShelf();
                }

                public BookShelf(){
                        super();
                        options();
                }
                public void options(){
                        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. View books on each shelf");
                                        System.out.println("4. Exit");
                                        int choice = Integer.parseInt(in.readLine());
                                        if  (choice == 1){
                                                System.out.println("Which shelf do you want to place a book?");
                                                System.out.println("Enter either 1, 2 or 3");
                                                int placement = Integer.parseInt(in.readLine());
                                                if(placement == 1){
                                                        System.out.println("Enter element:");
                                                        String item = bf.readLine();
                                                        garwick(placement);
                                                        bookShelf.push(item, placement);
                                                }if(placement == 2){
                                                        System.out.println("Enter an element:");
                                                        String item = bf.readLine();
                                                        garwick(placement);
                                                        bookShelf.push(item, placement);
                                                }if(placement == 3){
                                                        System.out.println("Enter an element:");
                                                        String item = bf.readLine();
                                                        garwick(placement);
                                                        bookShelf.push(item, placement);
                                                }
                                        }else if (choice == 2){
                                                System.out.println("Which shelf do you want to retrieve a book, 1, 2, or 3?");
                                                int choice2 = Integer.parseInt(in.readLine());
                                                switch (choice2){
                                                        case 1 : if (bookShelf.isEmpty(choice2)) {
                                                                                System.out.println( " Shelf " + choice2 + " is empty!");
                                                                        }else {
                                                                                System.out.println("Item" + bookShelf.pop(choice2)+ " is retrieved.");
                                                                        }break;
                                                        case 2 : if (bookShelf.isEmpty(choice2)) {
                                                                                System.out.println(" Shelf " + choice2 + " is empty!");
                                                                        }else {
                                                                                System.out.println("Item" + bookShelf.pop(choice2)+ " is retrieved.");
                                                                        }break;
                                                        case 3 : if (bookShelf.isEmpty(choice2)) {
                                                                                System.out.println(" Shelf " + choice2 + " is empty!");
                                                                        }else {
                                                                                System.out.println("Item" + bookShelf.pop(choice2)+ " is retrieved.");
                                                                        }break;
                                                        }
                                        }else if(choice == 3){
                                                System.out.println("Recent items");
                                                for (int i = 1; i <= shelf; ++i) {
                                                        System.out.println("shelf #" + i + ": " + bookShelf.top(i));
                                                        }
                                                        System.out.println("shelf #" + i + ":  Empty");
                                        }else if (choice == 4){
                                                System.out.println("You have exited. Thank you!");
                                                break;
                                        }
                        }while (true);
                }catch(IOException e){}
        }

                /*
                * Method that implements garwick's algorithm for reallocating free space
                * within a multiple stack
                */
                public void garwick(int i) {
                        int diff[] = new int[shelf + 1];
                        int size[] = new int[shelf + 1];
                        int totalSize = 0;
                        double freecells, incr = 0;
                        double alpha, beta, sigma = 0, tau = 0;
                        /* Compute for the allocation factors */
                        for (int j = 1; j <= bookShelf.noOfStack; j++) {
                                size[j] = bookShelf.size(j);
                                if ((bookShelf.T[j] - bookShelf.oldT[j]) > 0){
                                        diff[j] = bookShelf.T[j] - bookShelf.oldT[j];
                                }else{
                                        diff[j] = 0;
                                        totalSize += size[j];
                                        incr += diff[j];
                                }
                        }
                        diff[i]++;
                        size[i]++;
                        totalSize++;
                        incr++;
                        freecells = bookShelf.size2 - totalSize;
                        alpha = 0.10 * freecells / bookShelf.noOfStack;
                        beta = 0.90 * freecells / incr;
                        /* If all stacks are full */
                        if (freecells < 1)
                                throw new StackException("Stack overflow: All Stacks are full");
                        /* Compute for new bases */
                        for (int j = 2; j <= bookShelf.noOfStack; j++) {
                                tau = sigma + alpha + diff[j - 1] * beta;
                                bookShelf.B[j] = bookShelf.B[j - 1] + size[j - 1] + (int) Math.floor(tau)- (int) Math.floor(sigma);
                                sigma = tau;
                        }
                        /* Restore size of the overflowed stack to its old value */
                        size[i]--;
                        System.out.println("size[" + i + "] = " + size[i]);
                        /* Compute for new top addresses */
                        for (int j = 1; j <= bookShelf.noOfStack; j++) {
                                bookShelf.T[j] = bookShelf.B[j] + size[j];
                        }
                        bookShelf.oldT = bookShelf.T;
                }
}

It implements the Stack interface.
I run this on eclipse compiler.
Can someone help me please.. thanks a lot.. i really need to finish this asap..

SamCris Jan 12th, 2009 9:00 pm
Re: i need help on stack. If pop: stack is empty.
 
hello! may i know wat T[] and oldT[] represent? how do u derive them?

BestJewSinceJC Jan 12th, 2009 9:00 pm
Re: i need help on stack. If pop: stack is empty.
 
Can you post the error you are getting? It should include the line number, method names, and error name... info that would be incredibly helpful in helping you.

ezkonekgal Jan 12th, 2009 11:40 pm
Re: i need help on stack. If pop: stack is empty.
 
Quote:

Originally Posted by SamCris (Post 776856)
hello! may i know wat T[] and oldT[] represent? how do u derive them?

T[] refers to he top and oldT[] is the old top.. becuase in the garwick's algo, oldT will get new T when new base pointers, represented as B[], are computed.

ezkonekgal Jan 12th, 2009 11:44 pm
Re: i need help on stack. If pop: stack is empty.
 
Quote:

Originally Posted by BestJewSinceJC (Post 776857)
Can you post the error you are getting? It should include the line number, method names, and error name... info that would be incredibly helpful in helping you.


when you put an item in the shelf, is done by push method, and then try to retreive the item, done by pop, i doesn't have error, only just print's stack empty.. because i did specify in the code that if empty print to console Satck is empty. the program continues to run.

ok w8, i got this recenlty

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at MStack.push(MStack.java:45)
at BookShelf.options(BookShelf.java:48)
at BookShelf.<init>(BookShelf.java:24)
at BookShelf.main(BookShelf.java:19)

ezkonekgal Jan 13th, 2009 12:22 am
Re: i need help on stack. If pop: stack is empty.
 
Those T[], B[], and oldT[], keeps track of which stack you want, either stack1, stack2, and stack3.
If i chose stack1 to put an item, it pushes and is ok,but if i try to pop the item in which i put in stack1, it says stack empty. If i try to view what is inside the stack 1 2 3, i get stack 1 = the item i just pushed, stack 2 = the item i just pushed, and stack 3 = the item i just pushed, which is wrong because i only pushed an item in stack 1.

SamCris Jan 13th, 2009 1:40 am
Re: i need help on stack. If pop: stack is empty.
 
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 :(

verruckt24 Jan 13th, 2009 3:30 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 :(

Did you just swallow an ostrich size fly ?

SamCris Jan 13th, 2009 7:38 am
Re: i need help on stack. If pop: stack is empty.
 
Quote:

Originally Posted by verruckt24 (Post 777048)
Did you just swallow an ostrich size fly ?

LOL!!! :)) im sorry i had to speak in our dialect... its just that i cud express myself better that way, sorry :)

stultuske Jan 13th, 2009 10:29 am
Re: i need help on stack. If pop: stack is empty.
 
Quote:

Originally Posted by SamCris (Post 777159)
LOL!!! :)) im sorry i had to speak in our dialect... its just that i cud express myself better that way, sorry :)

and you have any reason to believe there's any one other than you on this forum that has even the slightest idea of what you said in that post?


All times are GMT -4. The time now is 4:58 am.

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