- 締切済み
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 と出ています 解決策教えてください 全てのプログラムを書いてるわけではありませんので おそらく関係のあるだろうってところを書きましたので わかりづらかったらすみません
- みんなの回答 (8)
- 専門家の回答
みんなの回答
- wormhole
- ベストアンサー率28% (1626/5665)
>ts.get()で >Test1のstrsを作成できると思っていたので Test1のstrsと、Test1.main(String[])メソッド内のstrs、は変数名が同じというだけの別物。
- salsberry
- ベストアンサー率69% (495/711)
> ArrayList<Test2> b=ts.get(); そこでエラーになるのはTest1のget()メソッドの返値型が単なるArrayListと宣言されているからです。 get()の返値型をArrayList<Test2>に変えてください。
- wormhole
- ベストアンサー率28% (1626/5665)
>どこがおかしいでしょうか? Test1.main(String[])で、ArrayList<Test2> strsのインスタンスを生成してますが、Test3#open()の >Test1 ts=new Test1(); >ArrayList<Test2> b =ts.get(); では、そのインスタンスを取得できないのはわかってます?(取得できるのはnull)
補足
ちょっとわからないです ts.get()で Test1のstrsを作成できると思っていたので
- hitomura
- ベストアンサー率48% (325/664)
> 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 でコンパイルしてあなたが悩んでいるエラーだけを再現できるようにしてから、その新しいコードを書いてください。
補足
はい よくわからないプログラムを掲示してしまい すみませんでした コンパイルが一つしかエラーが無いプログラムを書いてみました 同じ処理をしてると思います あまり本件とは関係ないですけど 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)
無変換検査については以下のURLが参考になります。 http://www.javaroad.jp/bbs/answer.jsp?q_id=20091206220544448 #期待するクラス以外はArrayStoreException例外として処理
- wormhole
- ベストアンサー率28% (1626/5665)
>public void c(){ >B b=new B(); >ArrayList b =a.get(); bが2つ定義されているように見えますが。 他にもおかしいところありますから、エラーも質問文に書いてあるもの以外にありますよね?
補足
javacでコンパイルしてるからなのかエラーは一つです
- hirotn
- ベストアンサー率59% (147/246)
ArrayListのあと、<B>と付いていないところがありますが、必要かどうか検討してください。
補足
B b=new B();を消して ArrayList<B> b=a.getをに直してみたら 今度は付け加えた部分に無検査変換というエラーが出てきました どうしたらいいでしょうか? たぶんa.getから返される値がPositionのarraylistか保障されてないからだと思うんですけど
- hitomura
- ベストアンサー率48% (325/664)
> 全てのプログラムを書いてるわけではありませんので > おそらく関係のあるだろうってところを書きましたので > わかりづらかったらすみません すみませんがソースを全部書いてください。でないと何とも言えません。
補足
書いてるプログラム上 ソースをすべて載せることはできません すみません
補足
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+""); } }