ネストされたオブジェクトを取得したい(Java)

このQ&Aのポイント
  • Javaでネストされたオブジェクトを取得する方法について説明します。
  • SeriesクラスにはVectorオブジェクトのインスタンス変数arrayがあります。
  • arrayの中にはIntegerとSeriesのインスタンスが入ることがあります。
回答を見る
  • ベストアンサー

ネストされたオブジェクトを取得したい(Java)

↓の文はコードの説明です。 Seriesクラスのいう、数の列を入れるクラスを定義しています。 その中にはインスタンス変数Vector arrayがあります。 arrayの中には、Integerと、インスタンス化されたSeriesを入れます。 イメージを書くとこんな感じです↓ 単純にarrayの中身がIntegerのみの場合は、 series[5, 4, 12, 54, 17] のようになります arrayの中身にインスタンス化されたSeriesが入ると、 array[5, array[2, 3], 4] のようかもしれません。 実際のコードは、 import java.util.Vector; class Series{ Vector<Object> array = new Vector<Object>(0); Series(){ array.add(new Integer(5)); array.add(new Series(2, 3)); // ネスト array.add(new Integer(4)); // 全体のarrayを表示 System.out.println(array); // 入れ子になっているarrayを表示 (エラーになります) System.out.println(array.elementAt(1).array); } Series(int a, int b){ array.add(new Integer(a)); array.add(new Integer(b)); } } public class TestSeries { public static void main(String[] args){ new Series(); } } です。 // 入れ子になっているarrayを表示 (エラーになります) System.out.println(array.elementAt(1).array); を消去すれば、 出力結果:[5, Series@7f5f5897, 4] となります。 // 入れ子になっているarrayを表示 (エラーになります) System.out.println(array.elementAt(1).array); を実行した時の目標は 出力結果:[2, 3] となることです。 インデントがなくなって、読みづらいと思いますが、よろしくお願いします。

  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

cast要

参考URL:
http://www.google.co.jp/search?q=Java+Vector+Object+cast
newtgecko
質問者

お礼

ご回答ありがとうございました。お陰様で思った通りに動作してくれました。 実は、型キャストは知っている方法で幾つか試したのですが、うまくいきませんでした。 (Series)array.elementAt(1).array まではいけたのですが、 ((Series)array.elementAt(1)) .array のようにカッコで囲むところには行き着けませんでしたし、このような方法があるとは知りませんでした。勉強になりました。なぜこのような書き方をするのか、まだわかっていないので、貼っていただいた参考URLをもとに調べてみます。

その他の回答 (1)

  • teketon
  • ベストアンサー率65% (141/215)
回答No.2

こう? > System.out.println(((Series)array.elementAt(1)).array);

newtgecko
質問者

お礼

ご回答ありがとうございます。 >こう? お陰様で、うまく動作してくれました! これから頑張ります。

関連するQ&A

  • エラーを解決したいんですが。

    // Genericsを用いたArrayListを使用し // ループ処理にはiteratorを使用しない。 // for文を使ってリスト中身が奇数の場合はそのまま画面表示。 // 偶数の場合は-1をかけてから画面表示。 import java.util.ArrayList; class Test{ public static void main(String[] args) { //GenericsのInteger型でArrayListのインスタンスを生成 ArrayList<Integer> array = new ArrayList<Integer>(); array.add(1); array.add(2); array.add(3); array.add(4); array.add(5); for(int i=0; i<array.size(); i++) { Integer integer = array.get( i ); //もし値が偶数だったら if(integer % 2 == 0){ integer *= -1; System.out.println( integer ); } //(それ以外)もし値が奇数だったら else{ System.out.println( integer ); } } } } 上記のプログラムで、 >Integer integer = array.get( i ); の場所が、「交換性がない型」と言われ、エラーになってしまうんですが どうしたらいいですか?

    • ベストアンサー
    • Java
  • オブジェクトを配列として扱いたい

    Java(オブジェクト指向)を始めて数日の者です。 LinkedListを利用し、インスタンス化したオブジェクトをListに入れて 扱えるようにしたいと考えています。 具体的には LinkedList<クラス名> array = new LinkedList<クラス名>(); クラス名 object1 = new クラス名(); -object1の処理- array.add(object1); -object1の処理- array.add(object1); -object1の処理- array.add(object1); このようにして、object1を配列で管理するイメージです。 object1の処理結果は、毎度変わっています。 しかしこれですと、最後のobject1の処理の内容がすべてのarray(i)に入ってしまいます。 要は、array(i)は全て、同じobject1を参照しているだけ。 object1の変更結果がarray(i)に入っていくというイメージでは無い、ということでしょうか? また、この他でインスタンス化したものを配列で管理できるような方法がございましたら、ご教授いただけると幸いです。m(_ _)m 動的に配列の要素数を変更(要素が追加)ができるようにしたいのです。

    • ベストアンサー
    • Java
  • Vectorクラスの使い方

    いつもお世話になっております。 Vector vector = new Vector(); String array[] = new String[11]; vector.addElement(array) for( int i = 0; i1 < vector.size(); i++) { String str = (String)vector.get(i); System.out.println(str); } 11の配列にデータ(String)を入力し(ここでは省略)、11すべてをVectorへいれ、String型で取り出したいのですがエラーになります。 System.out.println(vector1.get(i));だと文字化けします。 アドバイスお願いします。そういったことを書いてあるサイト等ご存知でしたらお願いします。

    • ベストアンサー
    • Java
  • メソッドの分割(リファクタリング?)

    指導教官からプログラム自体には問題はないが長すぎるのでメソッドを分割したほうがよいといわれました。以下に書きます(一部改変) try{ System.out.println("1. 2. どちらかを選択してください"); InputStreamReader reader = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(reader); String str = br.readLine(); int res = Integer.parseInt(str); if(!str.matches("[1-2]+")){ System.out.println("1、2から選択してください。"); continue;} if(res == 1){ System.out.println("キーワードを入力"); reader = new InputStreamReader(System.in); br = new BufferedReader(reader); str = br.readLine(); String sql = "SQL文"; ResultSet result = stmt.executeQuery(sql); //vectorにデータを格納 Vector vector1 = new Vector(); String[] array1 = new String[2]; while(result.next()){ array1[0] = result.getString("Res1"); array1[1] = result.getString("Res2"); vector1.addElement(array1); array1 = new String[2];} for(int i = 0;i < vector1.size();i++ ){ String Res1 = null;  String Res2 = null; String[] str1 = (String[])vector1.get(i); Res1 = str1[0]; Res2 = str1[1]; System.out.println("Res1,Res2は" + Res1 + "\t" + Res2);}} if(res == 2){1と同様なので省略・・}} catch(IOException e){ System.out.println(e + "例外が発生しました");} }} メソッドの分割のコツはあるのでしょうか?お勧めの本はございますか? 長くてすいません。

    • ベストアンサー
    • Java
  • java:サブクラスメソッドを呼び出したいです。

    java のプログラムで抽象クラスをオーバーライドしたサブクラスのメソッドをスーパークラスで呼び出したいのですが、どうしてもコンパイルが通りません。また通ったとしてもコマンドプロンプト画面で、 c:\File>javac UseSam.java c:\File>java UseSam 5 6 c:\File> となってしまい(この問題で求められている回答)5+6の結果 11 が返ってきません。 c:\File>java UseSam a a c:\File>型が違います c:\File>java UseSam 3 4 5 c:\File>引数の個数が不正です 上記のように打つとエラーメッセージだけは返ってきます。 つたない文章とはなってしまいましたが、ご教授のほどよろしくお願いいたします。 プログラムは下記のとおりとなります。(問題点などの指摘などしていただけたらありがたいです) 抽象クラスAbsSamは抽象メソッドadd含んでいる。 抽象メソッドaddは整数を返すメソッドで、整数型の引数aとbをとる。 abstract class AbsSam {     public abstract int add(int a, int b); } Samでは、抽象メソッドaddを実装し、addは引数a,bの和を返す。 public class Sam extends AbsSam {     public int add(int a,int b) {     return a + b ;     } } mainメソッドを含むUseSam。 プログラム実行時、引数として2つの整数を渡します。 c:\File>java UseSam 5 6 c:\File>11 と計算結果が返ってくる。 (条件) ・引数が2個でない場合、エラーメッセージを返す。 ・引数が数値でない場合、エラーメッセージを返す。 ・正しい引数が与えられた場合、addメソッドを実行し、addメソッドの続行結果を表示して終了とする。 public class UseSample { public static void main( String[] args ) { try { //引数が2個でない場合 if(args.length != 2){ System.out.println("エラーメッセージ:引数の個数が不正です"); //引数が2個の場合 } else if (args.length == 2) { int a = Integer.parseInt( args[0] ); int b = Integer.parseInt( args[1] ); AbsSam sum = new Sam(); sum.a = a; sum.b = b; System.out.println ("計算結果" + sum.add()); } else { System.out.println("エラー"); } //例外処理 } catch(NumberFormatException e) { System.out.println("エラーメッセージ:引数の型が不正です" ); } catch(Exception e) { System.out.println("エラー"); } } } 抽象クラスとサブクラスは問題ないのですが、UseSamがうまく動作しません。 ご教授のほどよろしく願いいたします。

    • ベストアンサー
    • Java
  • java教えてください。

    双方向リストをjavaで書きたいんですけどここまで書いて双方向リストになってるか不安になってきました。 これは双方向リストになっていますか? class MyListw{ int data; MyListw next = null; //次のノードへのポインタ MyListw prev = null; //前のノードへのポインタ MyListw(int data){ this.data = data; } void insertTail(MyListw node){ //リストの最後へ追加 MyListw tmp = this; while(tmp.next != null){ tmp = tmp.next; } tmp.next = node; node.prev = tmp.next; } void insertHead(MyListw node){ //リストの先頭へ追加 node.next = this.next; this.next = node; node.prev = this.next; } void insert(int head, MyListw node){ //リストの途中へ新規データを挿入 MyListw tmp = this; while(tmp != null){ if(tmp.data == head){ break; } tmp = tmp.next; } node.next = tmp.next; tmp.next = node; node.prev = tmp.next; } void delete(int here, MyListw node){ //リストからデータを1つ削除 MyListw tmp = this; while(tmp != null){ if(tmp.data == here){ break; } tmp = tmp.next; } node = tmp.next; tmp.next.prev = node; tmp.next = node.next; node.next.prev = tmp.next; node.next = null; node.prev = null; } void deleteHead(){ //先頭のノードを削除 MyListw tmp = next; this.next = tmp.next; tmp.next.prev = this.next; tmp.next = null; tmp.prev = null; } void deleteTail(){ //最後のノードを削除 MyListw tmp = this; MyListw lastList = null; while(tmp.next != null){ lastList = tmp; tmp = tmp.next; } lastList.next = null; lastList.prev = null; } void show(){ MyListw tmp = next; while(true){ System.out.print(tmp.data); if(tmp.next == null) break; tmp = tmp.next; } System.out.println(""); } void showTail(){ } } class MyListwApp{ public static void main(String[] args){ MyListw list = new MyListw(0); //初期ダミー System.out.println("最後に追加"); list.insertTail(new MyListw(1)); list.show(); System.out.println("逆順に表示"); list.showTail(); System.out.println("\n"); list.insertTail(new MyListw(5)); list.show(); System.out.println("逆順に表示"); list.showTail(); System.out.println("先頭に追加"); list.insertHead(new MyListw(8)); list.show(); System.out.println("逆順に表示"); list.showTail(); System.out.println("\n"); list.insertHead(new MyListw(9)); list.show(); System.out.println("逆順に表示"); list.showTail(); System.out.println("途中からデータを追加"); list.insert(1, new MyListw(2)); list.show(); System.out.println("逆順に表示"); list.showTail(); System.out.println("\n"); list.insert(2, new MyListw(3)); list.show(); System.out.println("逆順に表示"); list.showTail(); System.out.println("リストからデータを削除"); list.delete(8, new MyListw(1)); list.show(); System.out.println("逆順に表示"); list.showTail(); System.out.println("先頭のノードを削除"); list.deleteHead(); //先頭のノードを削除 list.show(); System.out.println("逆順に表示"); list.showTail(); System.out.println("\n"); list.deleteHead(); list.show(); System.out.println("逆順に表示"); list.showTail(); System.out.println("最後のノードを削除"); list.deleteTail(); //最後のノードを削除 list.show(); System.out.println("逆順に表示"); list.showTail(); System.out.println("\n"); list.deleteTail(); list.show(); System.out.println("逆順に表示"); list.showTail(); } }

    • ベストアンサー
    • Java
  • java初心者なのですが

    java初心者なのですが クラスの配列を使用して配列の配列を作りたいのですが class B { double a[]; } class A{ public static void main(String[] args){ B[] a =new B[3]; for(int i=0;i<3;i++){ a[i]=new B(); } a[0].a[0]=3;         ・・ここでエラー a[0].a[50]=9; a[0].a[100]=100; a[1].a[200]=150; a[2].a[300]=250; System.out.println("a[0].a[0]="+a[0].a[0]); System.out.println("a[0].a[50]="+a[0].a[50]); System.out.println("a[0].a[100]="+a[0].a[100]); System.out.println("a[1].a[200]="+a[0].a[200]); System.out.println("a[2].a[300]="+a[1].a[300]); } } ここでエラーと書いたところでjava.lang.NullPointerExceptionというエラーが出ます。 何が間違えているのでしょうか?どうのようにすればエラーがなくなるのか教えてください。

    • ベストアンサー
    • Java
  • インスタンスNameを文字列で表現するには?

    Object State; public static final Object PLAY=new Object(); public static final Object STOP=new Object(); Sateを操作するメソッド(); : : System.out.println(Object.Stateの文字列表現); としたいのですが、ObjectインスタンスであるPLAYやSTOPをprintlnメソッドで文字列として表現させるにはどうすればいいのでしょうか?コンソールにPLAY,STOPと表示させたいのですが、そのままprintln(State)とすると訳の分からない文字(→java.lang.Object@239137)が出てきます。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • Vectorから一部分を取り出す方法はありますか?

    教えていただきたいのですが、 1つのVectorの中に、いろいろなモノ(例えば、番号、名前、年齢のデータなど) が入っていたとして、そのVectorから番号だけ取り出して表示するなどということはできるでしょうか? /* 番号、名前、年齢を取得するメソッド(Vectorが戻り値)があるとして.... */ Vector vec = new Vector() ; str = number+name+age ; //これがたくさんあるとします vec.add(str) ;//番号と名前と年齢の組み合わせをVectorに格納 return vec ; /* 取りだし */ Vector vec=new Vector() ; vec = getVector() ; //メソッドから値を取りだし for(int i=0;i<vec.size();i++) { System.out.println(vec.elementAt(i)) ; } こんな感じだと、全部表示されてしまいます.... 部分ごとに取り出す方法はないでしょうか?初歩的な質問でごめんなさい、 よろしくお願いします!

    • ベストアンサー
    • Java
  • Java初心者です

    次のようなプログラムを作りました interface Vehicle{ void drive(); } abstract class Animal{ abstract void show(); } class Lion extends Animal{ public void show(){ System.out.println("ライオンです"); } } class Horse extends Animal implements Vehicle{ public void show(){ System.out.println("馬です"); } public void drive(){ System.out.println("乗り物として使えます"); } } class Elephant extends Animal implements Vehicle{ public void show(){ System.out.println("象です"); } public void drive(){ System.out.println("乗り物として使えます"); } } class Bear extends Animal{ public void show(){ System.out.println("熊です"); } } class twentyeight{ public static void main(String args[]){ Animal an[]; an = new Animal[4]; an[0] = new Lion(); an[1] = new Horse(); an[2] = new Elephant(); an[3] = new Bear(); for(int i = 0;i < an.length;i++){ if(an[i] instanceof Vehicle){ an[i].drive();//ここにエラーが出る } else{ an[i].show(); } } } } インターフェイスを実装しているオブジェクトを判別し、そのdriveメソッドの呼び出しをしたいのですができません、どなたか教えてください。

    • ベストアンサー
    • Java