アプリ版:「スタンプのみでお礼する」機能のリリースについて

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
と出ています

解決策教えてください

全てのプログラムを書いてるわけではありませんので
おそらく関係のあるだろうってところを書きましたので
わかりづらかったらすみません

A 回答 (8件)

>ts.get()で


>Test1のstrsを作成できると思っていたので

Test1のstrsと、Test1.main(String[])メソッド内のstrs、は変数名が同じというだけの別物。
    • good
    • 0

> ArrayList<Test2> b=ts.get();



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

この回答への補足

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+"");

}


}

補足日時:2013/06/05 00:17
    • good
    • 0

>どこがおかしいでしょうか?



Test1.main(String[])で、ArrayList<Test2> strsのインスタンスを生成してますが、Test3#open()の

>Test1 ts=new Test1();
>ArrayList<Test2> b =ts.get();

では、そのインスタンスを取得できないのはわかってます?(取得できるのはnull)

この回答への補足

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

補足日時:2013/06/05 00:12
    • good
    • 0

> 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

補足日時:2013/06/04 18:04
    • good
    • 0

無変換検査については以下のURLが参考になります。


http://www.javaroad.jp/bbs/answer.jsp?q_id=20091 …

#期待するクラス以外はArrayStoreException例外として処理
    • good
    • 0

>public void c(){


>B b=new B();
>ArrayList b =a.get();

bが2つ定義されているように見えますが。

他にもおかしいところありますから、エラーも質問文に書いてあるもの以外にありますよね?

この回答への補足

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

補足日時:2013/06/04 10:52
    • good
    • 0

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

この回答への補足

B b=new B();を消して
ArrayList<B> b=a.getをに直してみたら
今度は付け加えた部分に無検査変換というエラーが出てきました

どうしたらいいでしょうか?
たぶんa.getから返される値がPositionのarraylistか保障されてないからだと思うんですけど

補足日時:2013/06/04 09:53
    • good
    • 1

> 全てのプログラムを書いてるわけではありませんので


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

この回答への補足

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

補足日時:2013/06/04 09:54
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!