สิ่งนี้อาจเกิดขึ้นได้เช่นกันหากคุณกำลังเข้าถึงสมาชิกที่ไม่คงที่จากวิธีการคงที่หรือในทำนองเดียวกัน ต่อไปนี้เป็นสองด้านที่แตกต่างกันซึ่งเป็นสาเหตุของข้อผิดพลาดและส่วนอื่น ๆ ของโค้ดที่แก้ไขได้ มันเป็นเพียงเรื่องของการทำให้คลาสอื่นเป็น "คงที่"
package Stack;
import java.util.Stack;
import java.util.*;
public class StackArrList {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Stack S = new Stack();
System.out.println("Enter some integers and keep 0 at last:\n");
int n = in.nextInt();
while (n != 0) {
S.push(n);
n = in.nextInt();
}
System.out.println("Numbers in reverse order:\n");
while (!S.empty()) {
System.out.printf("%d", S.pop());
System.out.println("\n");
}
}
public class Stack {
final static int MaxStack = 100;
final static int Value = -999999;
int top = -1;
int[] ST = new int[MaxStack];
public boolean empty() {
return top == -1;
}
public int pop() {
if (this.empty()) {
return Value;
}
int hold = ST[top];
top--;
return hold;
}
public void push(int n) {
if (top == MaxStack - 1) {
System.out.println("\n Stack Overflow\n");
System.exit(1);
}
top++;
ST[top] = n;
}
}
}
สิ่งนี้แสดงข้อผิดพลาดไม่มีการปิดอินสแตนซ์ของชนิด StackArrList สามารถเข้าถึงได้ ต้องมีคุณสมบัติในการจัดสรรด้วยอินสแตนซ์ที่แนบมาของชนิด StackArrList (เช่น xnew A () โดยที่ x เป็นอินสแตนซ์ของ StackArrList) และไม่อนุญาตให้สร้างอินสแตนซ์ของคลาส Stack
เมื่อคุณทำให้ระดับกองการระดับคงที่กองจะทำงานได้ดีและไม่มีข้อผิดพลาดจะมี
package Stack;
import java.util.Stack;
import java.util.*;
public class StackArrList {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Stack S = new Stack();
System.out.println("Enter some integers and keep 0 at last:\n");
int n = in.nextInt();
while (n != 0) {
S.push(n);
n = in.nextInt();
}
System.out.println("Numbers in reverse order:\n");
while (!S.empty()) {
System.out.printf("%d", S.pop());
System.out.println("\n");
}
}
static class Stack {
final static int MaxStack = 100;
final static int Value = -999999;
int top = -1;
int[] ST = new int[MaxStack];
public boolean empty() {
return top == -1;
}
public int pop() {
if (this.empty()) {
return Value;
}
int hold = ST[top];
top--;
return hold;
}
public void push(int n) {
if (top == MaxStack - 1) {
System.out.println("\n Stack Overflow\n");
System.exit(1);
}
top++;
ST[top] = n;
}
}
}