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点について御教授頂けないでしょうか。よろしくお願い致します。