| | |
i need help on stack. If pop: stack is empty.
![]() |
•
•
Join Date: Sep 2008
Posts: 1,526
Reputation:
Solved Threads: 190
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).
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).
Last edited by BestJewSinceJC; Jan 13th, 2009 at 4:22 pm.
•
•
Join Date: Sep 2008
Posts: 91
Reputation:
Solved Threads: 1
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.
•
•
Join Date: Sep 2008
Posts: 91
Reputation:
Solved Threads: 1
That's what im trying to do in the first place.
i did this:
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..
•
•
•
•
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.
java Syntax (Toggle Plain Text)
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..
•
•
Join Date: Sep 2008
Posts: 1,526
Reputation:
Solved Threads: 190
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.
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.
Last edited by BestJewSinceJC; Jan 15th, 2009 at 12:36 pm.
•
•
Join Date: Sep 2008
Posts: 91
Reputation:
Solved Threads: 1
•
•
•
•
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'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;
java Syntax (Toggle Plain Text)
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]; } }
java Syntax (Toggle Plain Text)
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..
Last edited by ezkonekgal; Jan 16th, 2009 at 8:04 am.
![]() |
Similar Threads
- Stack with Dynamic Array (C++)
- C++ Stack/GeneralTree help (C++)
- Dynamic stack in c++ (C++)
- please i need your help. (C++)
- please help me to rewrite this. (C++)
- at the moment this is a stack of queue, i am trying to make it into first in first ou (C++)
- Mathematics In A Stack (C++)
- Stack Queue Fstream (C++)
- Reverse Output (Stack) (C++)
Other Threads in the Java Forum
- Previous Thread: need help.....
- Next Thread: Simple Scanner Class Question
| Thread Tools | Search this Thread |
account android applet application apps array automation awt bidirectional binary birt bluetooth businessintelligence busy_handler(null) card class classes client code collision columns component constructor database designadrawingapplicationusingjavajslider draw eclipse error eventlistener exception expand fractal free game givemetehcodez graphics gui guidancer homework html ide image inheritance integer integration intellij j2me java javafx javamicroeditionuseofmotionsensor javaprojects jlabel jme jni jpanel jtextfield jtree julia linux loop method midlethttpconnection migrate mobile mobiledevelopmentcreatejar monitoring myaggfun netbeans newbie nullpointerexception open-source oracle plazmic print problem program property ria scanner server set sharepoint smart sms smsspam sourcelabs splash sql sqlite subclass support swing testautomation textfield threads tree trolltech unlimited utility windows






