配列内に2つのスタックを実装するサンプルコードを見ています。私が理解していない部分が初期設定にあります。なぜtop1を0ではなく-1として初期化するのですか?なぜsize2の代わりにsize2のtop2?ここ0のような他の数字の代わりに、コンストラクタ-1の初期化がなぜですか?配列内に2つのスタックを実装する
コードである:
public class StackArray {
int size;
int top1, top2;
int arr[];
public StackArray(int n){
size = n;
arr = new int[n];
top1 = -1;
top2 = size;
}
public void push1(int x){
if(top1<top2-1){
top1++;
arr[top1] = x;
}
else{
System.out.println("There is a stack overflow ");
}
}
public void push2(int x){
if (top1<top2-1){
top2--;
arr[top2] = x;
}
else{
System.out.println("There is a stackoverflow");
}
}
public int pop1(){
if(top1>=0){
int x = arr[top1];
top1--;
return x;
}
else{
System.out.println(size);
System.out.println("There is a stack underflow");
}
return -1;
}
public int pop2(){
if (top2<size){
int x = arr[top2];
top2++;
return x;
}
else{
System.out.println("There is a stack underflow");
}
return -1;
}
}
テストを作成します。数字を変更してどのような動作が変化するかを確認します。 –
私の提案は、値を '0'に変更し、それをデバッグして何が起こるのかを確認することです。 –
ところで、' toString() 'メソッドはあなたが意図することをほぼ確実にしません。 –