以下のコードを参考に実装するの下の部分を作成しているのですが、途中でエラーが出てしまうのと、nullがpushされてしまいます。
表示したい実行結果
push:
aMyStack()
aMyStack(abc, def)
aMyStack(abc, def, ghi)
ghi
pop: ghi
aMyStack(abc, def)
pop: def
aMyStack(abc)
pop: abc
aMyStack()
エラーテスト
aMyStack()
pop エラー
top エラー
aMyStack()
aMyStack(1, 2, 3, 4)
aMyStack(1, 2, 3, 4, 5)
push エラー
aMyStack(1, 2, 3, 4, 5)
現状の実行結果
push:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 5
aMyStack()
aMyStack(null, abc)
aMyStack(null, abc, def)
ghi
pop: def
aMyStack(null, abc)
pop: abc
aMyStack(null)
pop: null
aMyStack()
at ex5.MyStack.pop(MyStack.java:37)
at ex5.MyStack.main(MyStack.java:99)
元のコード``````Java
javaのコード
public
1 private String[] items; // 要素を入れる配列 2 private int size; // スタックの最大サイズ 3 private int sp; // 空き場所を指すインデックス 4 5 public MyStack(int size) { 6 // TODO: メンバの初期化 7 } 8 9 /** 10 * 要素を追加する 11 */ 12 public void push(String str) { 13 // TODO: 実装する 14 } 15 16 /** 17 * トップ(最後に入れられた)要素を取り出して返す 18 * 19 * @return 要素。空なら null 20 */ 21 public String pop() { 22 // TODO: 実装する 23 // System.out.println("pop エラー"); // 空ならエラーを表示する 24 return null; 25 } 26 27 /** 28 * トップ(最後に入れられた)要素を取り出さずに参照する 29 * 30 * @return トップ要素。空なら null 31 */ 32 public String top() { 33 // TODO: 実装する 34 // System.out.println("top エラー"); // 空ならエラーを表示する 35 return null; 36 } 37 38 /** 39 * @return 空であるかどうか 40 **/ 41 public boolean isEmpty() { 42 // TODO: 実装する 43 return true; 44 } 45 46 public String toString() { 47 String[] actives = new String[sp]; 48 for (int i = 0; i < sp; i++) { 49 actives[i] = items[i]; 50 } 51 return "aMyStack(" + String.join(", ", actives) + ")"; 52 } 53 54 public static void main(String[] args) { 55 MyStack stack = new MyStack(5); 56 System.out.println("push:"); 57 System.out.println(stack); 58 stack.push("abc"); 59 stack.push("def"); 60 System.out.println(stack); 61 stack.push("ghi"); 62 System.out.println(stack); 63 System.out.println(stack.top()); 64 while (!stack.isEmpty()) { 65 System.out.println("pop: " + stack.pop()); 66 System.out.println(stack); 67 } 68 System.out.println("エラーテスト"); 69 System.out.println(stack); 70 stack.pop(); // 空のはずなのにpop! 71 stack.top(); // 空のはずなのにtop! 72 System.out.println(stack); 73 stack.push("1"); 74 stack.push("2"); 75 stack.push("3"); 76 stack.push("4"); 77 System.out.println(stack); 78 stack.push("5"); 79 System.out.println(stack); 80 stack.push("6"); // 一杯なはずなのにpush! 81 System.out.println(stack); 82 } 83} 84 85```java 86コード 87package ex5; 88 89public class MyStack { 90 // 要素を入れる配列 91 private String[] items; 92 // スタックの最大サイズ 93 private int size; 94 // 空き場所を指すインデックス 95 private int sp; 96 97 public MyStack(int size) { 98 // TODO: メンバの初期化 99 this.size=size; 100 this.items = new String[5]; 101 } 102 103 /** 104 * 要素を追加する 105 */ 106 public void push(String str) { 107 // TODO: 実装する 108 if (!isFull()) { 109 110 items[++sp] = str; 111 } 112 } 113 114 /** 115 * トップ(最後に入れられた)要素を取り出して返す 116 * 117 * @return 要素。空なら null 118 *java.lang.ArrayIndexOutOfBoundsException:配列の外の値を指定している 119 */ 120 public String pop() { 121 // TODO: 実装する 122 if (!isEmpty()) { 123 return items[--sp];//sp--は指定した後-1を引く 124 } else { 125 System.out.println("pop エラー"); 126 return null; 127 } 128 } 129 130 /** 131 * トップ(最後に入れられた)要素を取り出さずに参照する 132 * 133 * @return トップ要素。空なら null 134 */ 135 public String top() { 136 // TODO: 実装する 137 if (!isEmpty()) { 138 return items[sp]; 139 } else { 140 System.out.println("top エラー"); // 空ならエラーを表示する 141 return null; 142 } 143 } 144 145 /** 146 * @return 空であるかどうか 147 **/ 148 public boolean isEmpty() { 149 // TODO: 実装する 150 if (sp<0) { 151 return true; 152 } else { 153 return false; 154 } 155 } 156 157 //満タンかどうか 158 public boolean isFull() { 159 if (sp>=size) { 160 return true; 161 } else { 162 return false; 163 } 164 } 165 166 public String toString() { 167 String[] actives = new String[sp]; 168 for (int i = 0; i < sp; i++) { 169 actives[i] = items[i]; 170 } 171 return "aMyStack(" + String.join(", ", actives) + ")"; 172 } 173 174 public static void main(String[] args) { 175 MyStack stack = new MyStack(5); 176 System.out.println("push:"); 177 System.out.println(stack); 178 stack.push("abc"); 179 stack.push("def"); 180 System.out.println(stack); 181 stack.push("ghi"); 182 System.out.println(stack); 183 System.out.println(stack.top()); 184 while (!stack.isEmpty()) { 185 System.out.println("pop: " + stack.pop()); 186 System.out.println(stack); 187 } 188 System.out.println("エラーテスト"); 189 System.out.println(stack); 190 stack.pop(); // 空のはずなのにpop! 191 stack.top(); // 空のはずなのにtop! 192 System.out.println(stack); 193 stack.push("1"); 194 stack.push("2"); 195 stack.push("3"); 196 stack.push("4"); 197 System.out.println(stack); 198 stack.push("5"); 199 System.out.println(stack); 200 stack.push("6"); // 一杯なはずなのにpush! 201 System.out.println(stack); 202 } 203}
回答1件
あなたの回答
tips
プレビュー