アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (1件)

どここらコピーしてきたものか知りませんが、


まずは、ジェネリクスの残骸を何とかしたほうがいいんじゃないんですか?

これじゃコンパイルも通らないでしょ。

コンパイルも通らないものを出しておいて、見てくださいというのは、
エチケットに反してますからね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!