• 締切済み

arraylistの呼び出し

A.classでB.classのarraylistを作成し Cクラスのオブジェクトを何個もarraylistに保存しているんですけど そのarraylistをbクラスで使いたいんですけど うまくいきません 例とエラー文を載せますので、教えてください 例 public class A{ int i=0; int b=0; public static void main(String[] args){ ArrayList<B> strs=new ArrayList<B>(0); for(b=0;b<30;b++){ B b =new B(); //ここは何回も作ってます strs.add(b,i);   i++; } } public ArrayList get(){ return strs; } } class C { A a; static count=0; public void syutoku(SimpleTrajectoryViewer si){ this.a=a; } public void c(){ B b=new B(); ArrayList b =a.get(); B p=b.get(count); count ++; } } エラー文はクラスの ArrayList b =a.get();の部分で 互換性のない型 期待値  B 検出値     object と出ています 解決策教えてください 全てのプログラムを書いてるわけではありませんので おそらく関係のあるだろうってところを書きましたので わかりづらかったらすみません

  • Java
  • 回答数8
  • ありがとう数0

みんなの回答

  • wormhole
  • ベストアンサー率28% (1621/5657)
回答No.8

>ts.get()で >Test1のstrsを作成できると思っていたので Test1のstrsと、Test1.main(String[])メソッド内のstrs、は変数名が同じというだけの別物。

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.7

> ArrayList<Test2> b=ts.get(); そこでエラーになるのはTest1のget()メソッドの返値型が単なるArrayListと宣言されているからです。 get()の返値型をArrayList<Test2>に変えてください。

saya19
質問者

補足

Test2.javaを以下のように変えて表現してみたら 返却地はnullになってるみたいなんですが どうしてでしょうか? import java.awt.*; import java.io.*; import java.util.ArrayList; class Testc{ // 定数をクラス変数として定義 static double x; static double y; int arraycount=0; public void open(){ Test1 ts=new Test1(); ArrayList<Test2> b =ts.get(); Test2 a=b.get(0); x=a.x; y=a.y; System.out.println(""+x+""); } }

  • wormhole
  • ベストアンサー率28% (1621/5657)
回答No.6

>どこがおかしいでしょうか? Test1.main(String[])で、ArrayList<Test2> strsのインスタンスを生成してますが、Test3#open()の >Test1 ts=new Test1(); >ArrayList<Test2> b =ts.get(); では、そのインスタンスを取得できないのはわかってます?(取得できるのはnull)

saya19
質問者

補足

ちょっとわからないです ts.get()で Test1のstrsを作成できると思っていたので

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.5

> javacでコンパイルしてるからなのかエラーは一つです それはあなたが持っている本当のコードでの話ですよね。 あなたが「おそらく関係のあるだろうってところ」だけを抜き出したこの質問に書かれたコードのコンパイル結果は次の通りです。 A.java:24: エラー: <identifier>がありません 上記のエラーの出ている static count=0; という行に int を補い、冒頭に import java.util.ArrayList; class B {} class SimpleTrajectoryViewer {}; を補った結果が以下の通りです。 A.java:10: エラー: staticでない変数 bをstaticコンテキストから参照することはできません for(b=0;b<30;b++){ A.java:10: エラー: staticでない変数 bをstaticコンテキストから参照することはできません for(b=0;b<30;b++){ A.java:10: エラー: staticでない変数 bをstaticコンテキストから参照することはできません for(b=0;b<30;b++){ A.java:13: エラー: staticでない変数 iをstaticコンテキストから参照することはできません strs.add(b,i); A.java:13: エラー: addに適切なメソッドが見つかりません(B,int) strs.add(b,i);   メソッド ArrayList.add(int,B)は使用できません    (実引数Bはメソッド呼出変換によってintに変換できません) メソッド ArrayList.add(B)は使用できません    (実引数リストと仮引数リストの長さが異なります) A.java:14: エラー: staticでない変数 iをstaticコンテキストから参照することはできません i++; A.java:19: エラー: シンボルを見つけられません return strs;  シンボル: 変数 strs  場所: クラス A A.java:34: エラー: 変数 bはすでにメソッド c()で定義されています ArrayList b =a.get(); A.java:35: エラー: シンボルを見つけられません B p=b.get(count);  シンボル: メソッド get(int)  場所: タイプBの変数 b つまり、あなたが提示のコードではあなたが質問したいエラーを再現することができません。 だから私は「ソースを全部書いてください」と書いたのです。 とはいえ、どうやらあなたが抱えているコードは何らかのシステムの一部のようですので(SimpleTrajectoryViewer というクラス名からすると何らかの軌道制御か軌道シミュレーションですね)、量的にも守秘義務的にも全部出すわけにはいかないのでしょう。 ならば、あなたが今抱えているコードとは無関係なソースコードを新たに作って、コマンドラインから javac でコンパイルしてあなたが悩んでいるエラーだけを再現できるようにしてから、その新しいコードを書いてください。

saya19
質問者

補足

はい よくわからないプログラムを掲示してしまい すみませんでした コンパイルが一つしかエラーが無いプログラムを書いてみました 同じ処理をしてると思います あまり本件とは関係ないですけど test1からtest2のarraylistを作り、それをtestcで呼び出そうとしています どこがおかしいでしょうか? コンマ区切りに数字,数字で区切って書かれているtxtファイルを読み込んで test2のxとyに入れる処理をしています プログラム Test1.java ーーーーーーーーーーーーーーーーーーーーーーー import java.util.StringTokenizer; import java.io.*; import java.util.ArrayList; class Test1{ ArrayList strs; public static void main(String[] args){ int b=0; ArrayList<Test2> strs=new ArrayList<Test2>(0); try{ BufferedReader br=new BufferedReader(new FileReader(args[0])); String str; while((str=br.readLine())!=null){ StringTokenizer st = new StringTokenizer(str, ","); double data[] = new double [st.countTokens()]; int i = 0; int sum = 0; while (st.hasMoreTokens()) { data[i] = Double.parseDouble(st.nextToken()); sum += data[i]; i++; } Test2 ts =new Test2(); ts.set(data[0],data[1]); strs.add(b,ts); b++; } br.close(); } catch(IOException e){ System.out.println(" error"); } Testc ts= new Testc(); ts.open(); } public ArrayList get(){ return strs; } } Test2.java -------------------------------------------- import java.awt.*; import java.io.*; import java.util.ArrayList; class Test2{ // 定数をクラス変数として定義 double x; double y; public void set (double i,double b){ x=i; y=b; } } Testc.java -------------------------------------------- import java.awt.*; import java.io.*; import java.util.ArrayList; class Testc{ // 定数をクラス変数として定義 static double x; static double y; int arraycount=0; public void open(){ Test1 ts=new Test1(); ArrayList<Test2> b =ts.get(); } } エラー --------------------------------------------- testcについてです 無検査変換 ArrayList<Test2> b=ts.get(); 期待値 ArrayList<Test2> 検出地  ArrayList

  • hirotn
  • ベストアンサー率59% (147/246)
回答No.4

無変換検査については以下のURLが参考になります。 http://www.javaroad.jp/bbs/answer.jsp?q_id=20091206220544448 #期待するクラス以外はArrayStoreException例外として処理

  • wormhole
  • ベストアンサー率28% (1621/5657)
回答No.3

>public void c(){ >B b=new B(); >ArrayList b =a.get(); bが2つ定義されているように見えますが。 他にもおかしいところありますから、エラーも質問文に書いてあるもの以外にありますよね?

saya19
質問者

補足

javacでコンパイルしてるからなのかエラーは一つです

  • hirotn
  • ベストアンサー率59% (147/246)
回答No.2

ArrayListのあと、<B>と付いていないところがありますが、必要かどうか検討してください。

saya19
質問者

補足

B b=new B();を消して ArrayList<B> b=a.getをに直してみたら 今度は付け加えた部分に無検査変換というエラーが出てきました どうしたらいいでしょうか? たぶんa.getから返される値がPositionのarraylistか保障されてないからだと思うんですけど

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

> 全てのプログラムを書いてるわけではありませんので > おそらく関係のあるだろうってところを書きましたので > わかりづらかったらすみません すみませんがソースを全部書いてください。でないと何とも言えません。

saya19
質問者

補足

書いてるプログラム上 ソースをすべて載せることはできません すみません

関連するQ&A

  • ArrayListなかへのArrayListオブジェクトのセット方法

    スケジュールのプログラムを作成していまして、1日分のオブジェクトをArrayListにいれて、さらに、1日分のArrayLisのオブジェクトを1ヶ月のArrayListにいれました。 そこで、1ヶ月のArrayListのオブジェクトから1日のArrayListのオブジェクトに分解して、表示したところに、最後の日にちの件数が表示されました。 1.ArrayListにオブジェクトをいれますと、うまく表示されます。 2.ArrayListにArrayListオブジェクトをいれまして、総件数を表示したら、1日から31日までのArrayListのsizeメソッドが最後の日にちが表示されます。よって1日から30日のArrayListに31日分のArrayListが上書きされているように思われます。 1と2の違いと原因をご教授下さい。 //arraylist作成1ヶ月分。 public ArrayList setMonth(int year,int month,int user_id){ -省略- ArrayList monthList=null; for(int count=1; count<=day; count++){ monthList=new ArrayList(); ArrayList dayList=new ArrayList(); dayList=setDay(year,month,count); monthList.add(dayList); } for(int a=0; a<monthList.size(); a++){ ArrayList saa = (ArrayList)monthList.get(a); int mm= saa.size(); System.out.println("mm:"+mm); } return monthList; -省略- } //ArrayList作成1日分 public ArrayList setDay(int year,int month,int day){ ArrayList aList = new ArrayList(); -省略- while(rs.next()){ Allday schAll=new Allday(); schAll.setSchedule_id(rs.getInt("schedule_id")); schAll.setContents(rs.getString("contents")); aList.add(schAll); } for(int b=0; b<aList.size(); b++){ int si= ((Allday)aList.get(b)).getSchedule_id(); String con=((Allday)aList.get(b)).getContents(); } return aList; -省略- }

    • ベストアンサー
    • Java
  • ArrayList でスタックを

    初歩的でツマラナイかもしれません。 import java.util.ArrayList; でスタックを実現するクラス"MyStack"を書きました。 フィールドは private ArrayList<Integer> stack = new ArrayList<Integer>(); のみという条件です。 MyStack.java - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - import java.util.ArrayList; public class MyStack {   private ArrayList<Integer> stack = new ArrayList<Integer>();      // データを先頭に追加   public void push( int item ) {     stack.add( item );   }   // 先頭のデータを取り出す   public int pop( ) {     int rtn;     if( stack.isEmpty() ) {       System.out.println( "スタックは空です." );       System.exit( 1 );     }          rtn = stack.get( 0 );     stack.remove( 0 );     return rtn;   } } このMyStackを実行するクラス"MainForMyStack"を書きます。 実行結果は、標準出力に 43210 と出ることを想定しています。 MainForMyStack.java - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - import java.util.ArrayList; public class MainForMyStack {   public static void main(String[] args) {     MyStack stack = new MyStack();     // 0,1,2,3,4 をスタックに追加     for( int i=0; i < 5; i++ ) {       stack.push( i );     }     // スタックのデータを先頭から取り出す     for( int i=0; i < stack.size(); i++ ) {       System.out.print( stack.pop() );     }   } } さて、MainForMyStack.java の i < stack.size(); の箇所でエラーが出るのはなぜでしょう? どなたかご教授の方お願いします。

    • ベストアンサー
    • Java
  • ArrayList の継承について(初心者です)

    買い物かごクラスのプログラムを作っています。 このソースはフィールドにListを持たせているのですが、ArrayList を継承 してCartクラスを作りたいです。そうすることで、CartクラスのaddItem() メソッドやremoveItem()メソッドはmainでメソッドを呼び出せば良いため、 不要になると思うのですが、合計金額を求めるときに、どのように商品値段 を参照していいのかわかりません。 また、ArrayList を継承する場合、public class Cart extends ArrayList という書き方で良いのでしょうか? public class Cart { List<Item> itemList = new ArrayList<Item>(); public ShoppingCart(){} //商品をカートに追加 public void addItem(Item item){ itemList.add(item); } //カート内に入っている商品の合計金額を返却 public int getTotalPrice(){ int total=0; for(int i=0;i<getItemSize();i++){ total+=itemList.get(i).getPrice(); } return total; } //リストの指定された位置にある要素を削除 public void removeItem(int index){ itemList.remove(index); } }

  • ArrayListからの要素の取り出しについて

    質問いたします。 下記コードの目的は Textクラス内でTest.txtの読み込み・表示を行います 次にErrorクラス内では 【errorRead() 】Testクラスで発生する可能性があるエラーを記載したError.txtよりその内容を読み取りその内容をArrayListクラスのerrorListオブジェクトに格納しておきます。 【setErrorMsg】ではerrorListに格納された要素から必要なエラー表示を取り出す処理をしています。 質問は各クラスのメソッドで起こったエラーをキャッチした場合【setErrorMsg】メソッドへ対応する要素の番号を渡し、errorListよりgetメソッドを使い要素を取得しTestクラス内のcatch部分でその内容を表示させたいのですが、表示の仕方が良くわかりません。 class Test{ public static void main(String[] args){ try{ メソッドの呼び出し }catch(FileNotFoundException fnfe){ エラー内容の表示 }catch(IOException ie){ エラー内容の表示 } } class abc{ public voidTextRead() throws FileNotFoundException, IOException{ try{ 外部ファイルaaa.txtの読み込み、DOS画面への表示処理 }catch(FileNotFoundException){ error.setERROR_MESSAGE(0); }catch(IOException){ error.setERROR_MESSAGE(1); } } class Error{ public void errorRead() throws FileNotFoundException, IOException{ ArrayList errorList = new ArrayList(); try{ BufferedReader br = new BufferedReader(new FileReader("Error.txt")); while((errorStr = br.readLine()) !=null){ errorList.add(errorStr); } br.close(); }catch(FileNotFoundException fnfe){ setERROR_MESSAGE(3); }catch(IOException ie){ error.setERROR_MESSAGE(4); } public int setErrorMsg(int count){ errorList.get(count); return count; } } 宜しくお願い致します。

    • ベストアンサー
    • Java
  • javaのarraylistについて

    あるクラスでArrayListを使って オブジェクト変数を保存したんですけど その保存したオブジェクト変数をほかのクラスで使用するにはどうしたらいいでしょうか? 例えば クラスAでクラスBのオブジェクトを作成し そのオブジェクト変数をArrayListに保存しました クラスCでArrayListに保存したオブジェクト変数を呼び出したいです 初心者なので何を言ってるのかわからないかもしれないですけど よろしくお願いします

  • ArrayListのcloneメソッド

    お世話になります。 ArrayListのcloneメソッドなんですが、API上は「ArrayList のインスタンスのシャローコピーを返します。要素自体はコピーされません。 」と記載がありますが、 「ディープコピー」をしているような感じがして、なぜ「シャローコピー」と言っているのか、教えて欲しいです。 しかも、要素自体もコピーされているような…。 自分の理解では、 シャローコピー:コピー元、コピー先で同じオブジェクトを参照する ディープコピー:コピー元、コピー先で違うオブジェクトを参照する 試したソースは以下です。 --------------- import java.util.ArrayList; public class Test { public static void main(String[] args) { ArrayList<String> array = new ArrayList<String>(); array.add("a"); array.add("b"); ArrayList<String> array2 = (ArrayList<String>) array.clone(); array2.add("c"); System.out.println("array:" + array); System.out.println("array2:" + array2); } } --------------- cloneメソッドはシャローコピーなので、array2で「c」がaddされたら、arrayも「c」が追加されて、 array:[a, b, c] array2:[a, b, c] となるはずが、 array:[a, b] array2:[a, b, c] となります。 array、array2は別々のオブジェクトを参照しているような気がします。 恐らく大きな勘違いをしているのかもしれませんが、 調べてもいまいち理解できませんでした。 お手数おかけしますが、よろしくお願い致します。

    • ベストアンサー
    • Java
  • ArrayListを改良したい

    visual C# 2010 Express を使用しています。 ArrayListは動的に要素を追加できるの便利なのですが、 次のような使い方で要素を取り出そうとするとasキャストが必要になってしまいます・・・ class Data : Dictionary<string, string> { } class DataList : ArrayList { public void Add(Data value) { base.Add(value as Data); } } class Program { static void Main(string[] args) { var d = new Data(); d["a"] = "aa"; d["b"] = "bb"; DataList arr = new DataList(); arr.Add(d); // var dd = arr[0] as Data; var dd = arr[0]; Console.WriteLine(dd["a"]);// エラー 角かっこ [] 付きインデックスを 'object' 型の式に適用することはできません。 Console.ReadLine(); } } そこでというか、ラップした独自のクラスを作りたいと思い上のような感じで作成したのですが、 やはり同じエラーになってしまいます・・・ asキャストを必要とせず、そのままDataクラス(Dictionary<string, string>)を 取り出すためにはどのように作成したら良いのでしょうか?

  • 総称型ArrayList<E>への参照はパラメ-タ

    Java初心者です宜しくお願いします。 0から8までの数字をランダムに並べ替えるサブ関数を作成しました。 Eclipse上で単独のプログラムとして動かした場合には、エラーは出ませんが、他のプログラムの サブ関数として動かそうとすると、 「ArrayListはraw型です。 総称型ArrayList<E>への参照は、パラメ-ター化する必要があります。 Listはraw型です。総称型ArrayList<E>への参照は、パラメ-ター化する必要があります。」と いうエラーが出ます。 どのように修正してやればいいのでしょうか。 ================================================================================ public void ShuffleTest() { List c = new ArrayList() ; for ( int i = 0 ; i < 9 ; ++ i ) { c.add( new Integer( i ) ) ; } Collections.shuffle(c); // [?�?�?�?�] int j = -1 ; for ( int i = 0 ; i < 9 ; ++ i ) { // toString(c.get( i )) ; System.out.print( c.get( i ) + " " ) ; int k = j + 1 ; s_Oder[ k ] = i ; System.out.print( "s_Oder["+ k + "] =" + i ) ; } }

    • ベストアンサー
    • Java
  • ArrayListを使ったJavaコンパイルがうまくいかない

    題名どおりなのですが、まず以下のようなソースを 書きました。 import java.util.*; class Rab{ private String name; private int number; public Rab(){ name= ""; number=0; } public void setName(String name){ this.name=name; } public void setNumber(int number){ this.number=number; } public String getName(){ return name; } public int getNumber(){ return number; } } public class Rabexc{ public static void main(String[] args){ Rab[] rab=new Rab[5]; for(int i=0; i<5; i++){ rab[i]=new Rab(); } rab[0].setName("Owner"); rab[1].setName("Adminstrator"); rab[0].setNumber(1); rab[1].setNumber(2); ArrayList al=new ArrayList(); al.add(rab[0]); al.add(rab[1]); for(int i=0; i<al.size(); i++){ rab[i]=(Rab)al.get(i); System.out.println("name: "+rab[i].getName()+"number: "+rab[i].getNumber()); } } } これを実行してみたところ、 Rabexc.java:41: 警告:[unchecked] raw 型 java.util.ArrayList のメンバとしての add (E) への無検査呼び出しです。 al.add(rab[0]); ^ Rabexc.java:42: 警告:[unchecked] raw 型 java.util.ArrayList のメンバとしての add (E) への無検査呼び出しです。 al.add(rab[1]); ^ 警告 2 個 という警告が出てコンパイルできません。 サイト・参考書なども調べて考えていたのですが、いまいち問題の解決法が浮かばないため、詳しい方いましたら教えていただけると幸いです。 宜しくお願い致します。

  • ArrayListによる計算表作成

    for文を使用し九九の計算結果を配列に格納し、その配列内の情報を表形式で表示してみる。※配列はArrayListを使用すること 上記の問題を解いています。 -------------------------------------------------------------- import java.util.ArrayList; public class m4_2 { public static void main(String args[]) { ArrayList list = new ArrayList(); String[]s = new String[9]; for(int i = 1; i<=s.length; i++){ for(int j =1; j<=s.length; j++){ list.add((i * j));     //ここがどのように記述するか?? } System.out.print(list.get(0)); System.out.print(list.get(1)); System.out.print(list.get(2)); System.out.print(list.get(3)); System.out.print(list.get(4)); System.out.print(list.get(5)); System.out.print(list.get(6)); System.out.print(list.get(7)); System.out.print(list.get(8)); System.out.print("\n"); } } } ---------------------------------------------------------- 実行結果イメージ 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 (以下省略) 私の書いたソースでは1の位しか計算してくれません。 今月から本格的にJavaを勉強し始めた初心者なので どうかよろしくお願いいたします。

    • ベストアンサー
    • Java

専門家に質問してみよう