こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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つがうんともすんとも動きません。ジェネリクス型を使うという考え方もあるらしいのですが、ネットで調べてもピンと来ず寸詰まり状態になってしまっています。後少しだと思うのですが。。。。 どなたかご教授頂けないでしょうか?よろしくお願い致します。

投稿日時 - 2014-11-20 11:12:14

QNo.8831189

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

>class LocalList implements List{
>// コンストラクタ
> void mylist(){

クラス記述の基本をもう一回おさらいしてください。コンストラクタの名前も記述方法も間違ってます。ファイル名は、なんて付けているのだろう?
あと、クラスが2つ有るけど、別のファイルにちゃんと分けてるんですよね?

投稿日時 - 2014-11-21 21:26:32

ANo.3

#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等の開発環境を補足願います。

投稿日時 - 2014-11-20 16:59:52

ANo.2

#1 ですが、他の所を見たら「これ本当に動いてるの?」と思えるところが出てきました。
すみませんが今の
> setメソッドとremoveメソッド以外は起動するのようになったのですが
というソースを、括弧を付けるとかの加工無しで、そのままコピペして補足してください。

投稿日時 - 2014-11-20 12:00:39

補足

回答ありがとうございます。以下がソースです。
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() + "になったので負けです");

}

}

投稿日時 - 2014-11-20 13:14:25

ANo.1

> setメソッドとremoveメソッド以外は起動するのようになったのですが
いや get もいかんでしょ、ソースがこの通りだったら。
それに、書く予定のないメソッドは何もしない処理にするんじゃなくて UnsupportedOperationException を投げるようにしないと。

投稿日時 - 2014-11-20 11:41:22

あなたにオススメの質問