- 締切済み
Javaのプログラムの質問です。
Javaのプログラムについての質問です。 Listインターフェースの実装クラスの自作と、作成したクラスの全メソッドを呼び出すサンプルを作成せよ、という問題です。 注意点として、java.util.Listの実装クラスは使用出来ません(ArrayListなど)。実装するメソッドは、コードの中に番号を振ってあります。 import java.util.Collection; import java.util.Iterator; import java.util.ListIterator; import java.util.List; class LocalList implements List{ private int Count; private String Data[]; private Iterator ite; private ListIterator lite; // コンストラクタ void mylist(){ Data = new String[10]; Count = 0; } (1) public boolean add(Object str){ if(Count >= 10){ return false; } Data[Count ++] = new String((String)str); 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; } (2) 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; } (3) public Object get(int i){ return (i >= Count); } public int hashCode(){ return -1; } public int indexOf(Object str){ return -1; } public boolean isEmpty(){ return false; } public Iterator iterator(){ return ite; } public int lastIndexOf(Object str){ return -1; } public ListIterator listIterator(){ return lite; } public ListIterator listIterator(int i){ return lite; } (4) public Object remove(int i){ return (i >= Count); } public boolean remove(Object str){ return true; } public boolean removeAll(Collection c){ return false; } public boolean retainAll(Collection c){ return false; } (5) public Object set(int i,Object str){ return Data[i]; } (6) 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(); sub.add("ビルドバーニングガンダム"); sub.add("ライトニングガンダム"); sub.add("ウイニングガンダム"); sub.add("ガンダムフェニーチェリナーシタ"); sub.add("R・ギャギャ"); for(int i = 0; i < sub.size(); i++){ System.out.println(sub.get(i)); } // 改行 System.out.println(); // setメソッド sub.set(1,"ガンダムエピオン"); for(int i = 0; i < sub.size(); i++){ System.out.println(sub.get(i)); } // 改行 System.out.println(); // sizeメソッド System.out.println("\r\n" + "機体数は" + sub.size() + "です" + "\r\n"); // 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() + "になったので負けです"); } } setメソッドとremoveメソッド以外は起動するのようになったのですが、この2つがうんともすんとも動きません。ジェネリクス型を使うという考え方もあるらしいのですが、ネットで調べてもピンと来ず寸詰まり状態になってしまっています。後少しだと思うのですが。。。。 どなたかご教授頂けないでしょうか?よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- mpro-gram
- ベストアンサー率74% (170/228)
>class LocalList implements List{ >// コンストラクタ > void mylist(){ クラス記述の基本をもう一回おさらいしてください。コンストラクタの名前も記述方法も間違ってます。ファイル名は、なんて付けているのだろう? あと、クラスが2つ有るけど、別のファイルにちゃんと分けてるんですよね?
- hitomura
- ベストアンサー率48% (325/664)
#1-2 です。 補足いただいたソースをコンパイルしてみましたが、コンパイルエラーが発生しています。 ----------------------------------------------- >javac -version javac 1.8.0_25 >javac LocalList.java LocalList.java:147: エラー: シンボルを見つけられません mylist sub = new mylist(); ^ シンボル: クラス mylist 場所: クラス Main LocalList.java:147: エラー: シンボルを見つけられません mylist sub = new mylist(); ^ シンボル: クラス mylist 場所: クラス Main エラー2個 ----------------------------------------------- あなたが使用している Java のバージョンとエディタ・IDE等の開発環境を補足願います。
- hitomura
- ベストアンサー率48% (325/664)
#1 ですが、他の所を見たら「これ本当に動いてるの?」と思えるところが出てきました。 すみませんが今の > setメソッドとremoveメソッド以外は起動するのようになったのですが というソースを、括弧を付けるとかの加工無しで、そのままコピペして補足してください。
- hitomura
- ベストアンサー率48% (325/664)
> setメソッドとremoveメソッド以外は起動するのようになったのですが いや get もいかんでしょ、ソースがこの通りだったら。 それに、書く予定のないメソッドは何もしない処理にするんじゃなくて UnsupportedOperationException を投げるようにしないと。
補足
回答ありがとうございます。以下がソースです。 import java.util.Collection; import java.util.Iterator; import java.util.ListIterator; import java.util.List; class LocalList implements List{ private int Count; private String Data[]; private Iterator ite; private ListIterator lite; // コンストラクタ void mylist(){ Data = new String[10]; Count = 0; } // 中身実装 public boolean add(Object str){ if(Count >= 10){ return false; } Data[Count ++] = new String((String)str); 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; } 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; } // 中身実装 public Object get(int i){ return (i >= Count); } public int hashCode(){ return -1; } public int indexOf(Object str){ return -1; } public boolean isEmpty(){ return false; } public Iterator iterator(){ return ite; } public int lastIndexOf(Object str){ return -1; } public ListIterator listIterator(){ return lite; } public ListIterator listIterator(int i){ return lite; } // 中身実装 public Object remove(int i){ return i; } public boolean remove(Object str){ return false; } public boolean removeAll(Collection c){ return false; } public boolean retainAll(Collection c){ return false; } // 中身実装 public Object set(int i,Object str){ for(int j = 0; j < Data.length; j++){ if( j == i ){ Data[i] = new String((String)str); } } return Data; } 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・ギャギャ"); for(int i = 0; i < sub.size(); i++){ System.out.println(sub.get(i)); } // 改行 System.out.println(); // setメソッド sub.set(1,"ガンダムエピオン"); for(int i = 0; i < sub.size(); i++){ System.out.println(sub.get(i)); } // 改行 System.out.println(); // sizeメソッド System.out.println("\r\n" + "機体数は" + sub.size() + "です" + "\r\n"); // removeメソッド sub.remove(3); for(int i = 0; i < sub.size(); i++){ System.out.println(sub.get(i)); } // clearメソッド sub.clear(); System.out.println("\r\n" + "機体数が" + sub.size() + "になったので負けです"); } }