- 締切済み
javaのプログラミングについての質問です。
Javaのプログラムについての質問です。長くなってしまいますがご容赦下さい。 Listインターフェースの実装クラスの自作と、作成したクラスの全メソッドを呼び出すサンプルを作成せよ、という問題です。以下が現在までに作成したコードになります。 注意点として、java.util.Listの実装クラスは使用出来ません(ArrayListなど)。実装するメソッドは、コードの中にコメントを振ってあります。 import java.util.List; import java.util.Collection; import java.util.Iterator; import java.util.ListIterator; class Mylist implements List{ private int Count; private String Data[]; // コンストラクタ public Mylist(){ Data = new String[10]; Count = 0; } /** 実装するaddメソッド @return boolean APIの設定に従う @param e エレメント(要素) **/ public boolean add(E e){ Data[Count] = (String)e; Count++; return true; } public void add(int i,Object str){ } public boolean addAll(Collection c){ return false; } public boolean addAll(int i,Collection c){ return false; } /** 実装するclearメソッド **/ public void clear(){ Count = 0; } public boolean contains(Object str){ return false; } public boolean containsAll(Collection c){ return false; } public boolean equals(Object str){ return false; } /** 実装するgetメソッド @return E エレメント(要素) @param i 指定されたインデックス番号 **/ public E get(int i){ /* エレメントeに、String型Data[i]を キャストして格納*/ E e = (E)Data[i]; return e; } public int hashCode(){ return -1; } public int indexOf(Object str){ return -1; } public boolean isEmpty(){ return false; } public Iterator iterator(){ return null; } public int lastIndexOf(Object str){ return -1; } public ListIterator listIterator(){ return null; } public ListIterator listIterator(int i){ return null; } /** * 実装するremoveメソッド * @return E エレメント(要素) * @param index 指定されたインデックス番号 **/ public E remove(int index){ /* Dataを最大まで回し、iをインクリメントしたData[i++]を String型Dataに格納する*/ for(int i = index; i < Data.length; i++){ Data[i] = Data[index++]; } Count--; E e = (E)Data; return e; } public boolean remove(Object str){ return false; } public boolean removeAll(Collection c){ return false; } public boolean retainAll(Collection c){ return false; } /** * 実装するsetメソッド * @return E エレメント(要素) * @param i 指定されたインデックス番号 * @param element 置き換える要素 **/ public E set(int i,E element){ // String型Dataにelementをキャストして格納 Data[i] = (String)element; // エレメントeにData[i]をキャストして格納 E e = (E)Data[i]; // 値を返す return e; } /** * 実装するsizeメソッド * @return int 指定されたインデックス番号 **/ public int size(){ return Count; } public List subList(int i,int j){ return this; } public Object[] toArray(){ return Data; } public Object[] toArray(Object[] a){ return Data; } } class Main { /** メインメソッド **/ public static void main(String args[]) { Mylist sub = new Mylist(); /* addメソッドを実装し、機体名を要素とする。 addを最大まで回し、getメソッドで要素を取り出して表示する*/ sub.add("ビルドバーニングガンダム"); sub.add("ライトニングガンダム"); sub.add("ウイニングガンダム"); sub.add("ガンダムフェニーチェリナーシタ"); sub.add("R・ギャギャ"); sub.add("ユニコーンガンダム"); for(int i = 0; i < sub.size(); i++){ System.out.println(sub.get(i)); } // sizeメソッド System.out.println("\r\n" + "機体数は" + sub.size() + "です" + "\r\n"); // setメソッド sub.set(0,"ガンダムエピオン"); for(int i = 0; i < sub.size(); i++){ System.out.println(sub.get(i)); } // 改行 System.out.println(); // removeメソッド sub.remove(1); for(int i = 0; i < sub.size(); i++){ System.out.println(sub.get(i)); } // clearメソッド sub.clear(); System.out.println("\r\n" + "機体数が" + sub.size() + "になったので負けです"); } } コンパイルして実行すると、removeメソッドで指定した箇所ではなく、要素の1番最後が削除されています。思うに、removeメソッドを実装する所のfor(int i = index; i < Data.length; i++){の中の条件が違うと思うのですが。。。。 また、現在addには10個箱を作成するようにしていますが、11個目をメインクラス内で用意した場合、例外ではなく新たに箱を作らなければならない、という後だしジャンケン的な事を言われて、思わず「じゃあArrayListでいいじゃないか」と思ってしまいました。 気を取り直してこの3連休で終わらせたいと思っています。ここまでで現状コードの完成は50%かそれ以下だとは思いますが、どなたか上記2点について御教授頂けないでしょうか。よろしくお願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- ngsvx
- ベストアンサー率49% (157/315)
どここらコピーしてきたものか知りませんが、 まずは、ジェネリクスの残骸を何とかしたほうがいいんじゃないんですか? これじゃコンパイルも通らないでしょ。 コンパイルも通らないものを出しておいて、見てくださいというのは、 エチケットに反してますからね。