java
1class MyLinkedStack { 2 class Node { 3 Node next = null; // 次のリストへのポインタ 4 String data; // 格納するデータ 5 public Node(String d) {data = d;} // コンストラクター 6 } 7 8 Node head = new Node(null); 9 10 public void push(String item) { 11 Node n = new Node(item); 12 n.next = head; 13 head = n; 14 } 15 16 public String pop() { 17 if (head.next == null) 18 throw new IllegalStateException("空の stack を pop した!"); String item = head.data; 19 head = head.next; 20 return item; 21 } 22 23 public String peek() { 24 if (head.next == null) 25 throw new IllegalStateException("空の stack を peek した!"); return head.data; 26 } 27 28 @Override 29 public String toString() { 30 String str = "["; 31 Node n = head; 32 while (n.next != null && n.next.next != null) { 33 str += n.data + ", "; 34 n = n.next; 35 } 36 if (n.next != null) str += n.data; 37 return str + "]"; 38 } 39} 40
java
1//MyLinkedStack継承 2class NewLinkedStack extends MyLinkedStack { 3 Node next = head; 4 MyLinkedStack mls= new MyLinkedStack(); 5 6 //public NewLinkedStack(Node head) { 7 // mls.head = head; 8 // TODO 自動生成されたコンストラクター・スタブ 9 ///} 10 11 public boolean remove(String d) { 12 String result = peek(); 13 //非存在のデータの確認はこれで良いのかなと思っています 14 if (!(result.equals(d))) { 15 return false; 16 }else { 17 //中間データの削除方法がわかりません 18 //末尾データの削除方法がわかりません 19 20 } 21 return true; 22 } 23} 24
java
1// 単元07課題1用事前提供ファイル 2// 指示に従って作成したプログラムのテストプログラムです 3// このプログラムを実行して所定の結果が得られることを確認してください 4// このプログラムは変更しないでください 5 6class StackTest { 7 public static void main(String[] args) { 8 NewLinkedStack nls = new NewLinkedStack(); 9 try { 10 System.out.println("push pop peekのテスト"); 11 nls.push("a"); 12 nls.push("b"); 13 nls.push("c"); 14 nls.push("d"); 15 nls.push("e"); 16 nls.push("f"); 17 System.out.println(nls); 18 System.out.println("pop →" + nls.pop()); 19 System.out.println("peek →" + nls.peek()); 20 21 System.out.println(nls.toString()); 22 if (!nls.toString().equals("[e, d, c, b, a]")) { 23 24 System.out.println("push pop peek テスト ■NG " + nls); 25 return; 26 } 27 System.out.println("push pop peek テスト OK " + nls); 28 29 System.out.println("\n項目数が3以上の時のテスト"); 30 if (nls.remove("x") || !nls.toString().equals("[e, d, c, b, a]")) { 31 System.out.println("非存在データ削除テスト ■NG " + nls); 32 return; 33 } 34 System.out.println("非存在データ削除 OK " + nls); 35 36 if (!nls.remove("c") || !nls.toString().equals("[e, d, b, a]")) { 37 System.out.println("中間データc削除できず ■NG " + nls); 38 return; 39 } 40 System.out.println("中間データc削除 OK " + nls); 41 42 if (!nls.remove("e") || !nls.toString().equals("[d, b, a]")) { 43 System.out.println("先頭データe削除できず ■NG " + nls); 44 return; 45 } 46 System.out.println("先頭データe削除 OK " + nls); 47 48 if (!nls.remove("a") || !nls.toString().equals("[d, b]")) { 49 System.out.println("末尾データa削除できず ■NG " + nls); 50 return; 51 } 52 System.out.println("末尾データa削除 OK " + nls); 53 54 System.out.println("\n項目数が2の時のテスト"); 55 if (nls.remove("x") || !nls.toString().equals("[d, b]")) { 56 System.out.println("非存在データ削除テスト ■NG " + nls); 57 return; 58 } 59 System.out.println("非存在データ削除 OK " + nls); 60 61 if (!nls.remove("b") || !nls.toString().equals("[d]")) { 62 System.out.println("末尾データb削除できず ■NG " + nls); 63 return; 64 } 65 System.out.println("末尾データb削除 OK " + nls); 66 67 nls.push("g"); 68 if (!nls.toString().equals("[g, d]")) { 69 System.out.println("pushできず ■NG " + nls); 70 return; 71 } 72 System.out.println("データgのpush OK " + nls); 73 74 if (!nls.remove("g") || !nls.toString().equals("[d]")) { 75 System.out.println("先頭データg削除できず ■NG " + nls); 76 return; 77 } 78 System.out.println("先頭データg削除 OK " + nls); 79 80 System.out.println("\n項目数が1の時のテスト"); 81 if (nls.remove("x") || !nls.toString().equals("[d]")) { 82 System.out.println("非存在データ削除テスト ■NG " + nls); 83 return; 84 } 85 System.out.println("非存在データ削除 OK " + nls); 86 87 if (!nls.remove("d") || !nls.toString().equals("[]")) { 88 System.out.println("唯一データd削除できず ■NG " + nls); 89 return; 90 } 91 System.out.println("唯一データd削除 OK " + nls); 92 93 System.out.println("\n項目数が0の時のテスト"); 94 if (nls.remove("x") || !nls.toString().equals("[]")) { 95 System.out.println("データ削除テスト ■NG " + nls); 96 return; 97 } 98 System.out.println("データ削除 OK " + nls); 99 100 } catch (IllegalStateException e) { 101 System.out.println(e); 102 } 103 } 104} 105/* 実行結果 106>java StackTest 107テストプログラム>java StackTest 108push pop peekのテスト 109[f, e, d, c, b, a] 110pop →f 111peek →e 112push pop peek テスト OK [e, d, c, b, a] 113 114項目数が3以上の時のテスト 115非存在データ削除 OK [e, d, c, b, a] 116中間データc削除 OK [e, d, b, a] 117先頭データe削除 OK [d, b, a] 118末尾データa削除 OK [d, b] 119 120項目数が2の時のテスト 121非存在データ削除 OK [d, b] 122末尾データb削除 OK [d] 123データgのpush OK [g, d] 124先頭データg削除 OK [d] 125 126項目数が1の時のテスト 127非存在データ削除 OK [d] 128唯一データd削除 OK [] 129 130項目数が0の時のテスト 131データ削除 OK [] 132*/ 133// Copyright 2017 FUJITSU APPLICATIONS LIMITED 134
【概要】
Linked Listのスタックを先頭から見ていき、指定データがあれば削除するというプログラムを作成したいです。
継承しているクラスのメソッドに
peek(),pop()しか存在せず、
新しいクラスでのメソッドも
boolean remove (String d)のみもつという制限がついています。
peekもpopもスタックの先頭に対しての
メソッドのため、どうやって中間データや最後のデータを確認、削除すれば良いかわかりません。
教えていただければ幸いです。
【条件】
NewLinkedStack クラスはMyLinkedStack クラスを継承
NewLinkedStack クラスは remove メソッドのみを持つ
スタックを先頭から見ていき指定データがあれば削除し true を返す。
指定データが複数あっても最初の 1 つしか削除しない。
指定データがなければ false を返す。
【ゴール】
tackTest.java を実行して全ての結果でOKが出ること。
回答1件
あなたの回答
tips
プレビュー