[PR]ネットとスマホ OCNでまとめておトク!

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

解決策教えてください

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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qシンボルが見つかりませんというエラーが理解できません。

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Image[3];
Thread t;
int index1 = 0;
int index2 = 0;
String msg = "";
String msg1 = "";

boolean state = false;
Button b1 = new Button("ぐー");
Button b2 = new Button("ちょき");
Button b3 = new Button("ぱー");

public void init(){
for(int i = 0; i<=2; i++){
img[i] = getImage(getDocumentBase(),"hanabi" + (i+1) + ".JPG");
}
add(b1);
add(b2);
add(b3);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
msg1 = "結果は・・";

}

public void paint(Graphics g){
g.drawImage(img[index1],350,30,this);
g.drawImage(img[index2],695,30,this);
g.drawString("コンピューター",420,300);
g.drawString("あなた",800,300);
g.drawString(msg,630,320);
g.drawString(msg1,550,320);
}

public void start(){
state = true;
t = new Thread(this);
t.start();

}

public void run(){
while(state){
index1++;
if(index1 == 3){
index1 = 0;
}
index2++;
if(index2 == 3){
index2 = 0;
}
repaint();
try {
Thread.sleep(60);
}catch(InterruptedException e) { }
}
}

public void actionPerformed(ActionEvent e){
if(state == false) {
start();
return;

}
state = false;
if(e.getSource() == b1) {
msg = "ぐー";
index2 = 0;
}

else if(e.getSource() == b2){
msg = "ちょき";
index2 = 1;
}

else if(e.getSource() == b3){
msg = "ぱー";
index2 = 2;
}
check();
repaint();
}

public void check() {
if(index1 == index2) msg ="あいこ";


else if (index1 == 0) {
if(index2 == 2) msg="あなたの勝ち";
else msg ="あなたの負け";
}

else if(index1 == 1) {
if(index2 == 0) msg="あなたの勝ち";
else msg="あなたの負け";
}

else if(index1 == 2) {
if(index2 == 1) msg="あなたの勝ち";
else msg="あなたの負け";
}

}
}

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Imag...続きを読む

Aベストアンサー

「シンボルを見つけられません。」というエラーの下に何か表示がありませんでしたか?そこにヒントがあると考えられます。
シンボルを見つけられませんといエラーが表示される主な理由は4つあります。
(1)クラス、メソッド、変数などの綴りミスや定義していない変数を使用している可能性がある。
(2)コンストラクタを呼び出すときに、newを忘れている可能性がある。(3)公開されていないメンバーを呼び出している可能性がある。
(4)必要なimport文を記述し忘れている可能性がある。
ここでのあなたのエラーは(1)番ではないでしょうか?上記ではimageとなっている変数がimgになっていますね。
これはエラー表示をよく見ることで意外と簡単に解決できるのです。
ゆっくり丁寧にエラー表示を見るように心がけることが大事ですよ。

Qクラス間でのデータ参照

あるクラスでArrayListにデータを格納し、そのデータを別のクラスで使いたいと思っています。

Javaでそれをするために、どのようにすればよいのでしょうか?

何か知識がある方教えてください。

Aベストアンサー

> つまり、教えてもらった方法は、
> *リストを作るクラス
> *そのリストを使って処理をするクラス
> *命令を出すクラス
> の三つに分かれているということですか?

はい、
Aru: リストを作るクラス
Betsu~3: そのリストを使って処理をするクラス
です。

別のクラスがあるクラスのインスタンスの生成から管理していれば,
命令を出すクラスを作らずともかまいません。
class Betsu4 {
public void shori() {
Aru aru = new Aru();
aru.createList();
ArrayList list = aru.getList();
}
}

QArrayListの使い方がわかりません。(超初心者です。)

情報管理用のクラス[Hito]を作成する。
プロパティ
 String name
double taijyu
double sincho
double nenrei

・メインクラスでHitoをArrayListに5つ格納し、それぞれの値を表示させるという課題に挑んでいます。

2週間前からjavaを勉強し始めたばかりで、ようやくオブジェクト指向や、クラスというものどんなものか多少イメージがわいてきた程度です。ArrayListについては配列と違い、格納するデータ数の数をはじめから決めなくてもいいというぐらいしかわかっていません。(これでさえ違うかも?)

 どのように組みはじめばいいか、そしてArrayListはどのように使えばいいのか教えていただけますか? よろしくお願いします。

Aベストアンサー

ほかの方の説明で理解を深めたら、以下のコーディングを打ち込んでコンパイルします。
C:\java\OKWeb>javac TestHito.java
成功したら、

C:\java\OKWeb>java TestHito
で実行してみてください。
C:\java\OKWeb>java TestHito
名前 あきら 体重 74.3 身長 184.3 年齢 35
名前 まみ 体重 44.5 身長 168.4 年齢 28

と表示されます。
先ず動く事で感動を得る事が大切だと思います。
import java.util.*;

class Hito {
private String name;
private double taijyu;
private double sincho;
private int nenrei;

public Hito(){
name="";
taijyu=0;
sincho=0;
nenrei=0;
}

public void setName(String name){
this.name = name;
}
public void setTaijyu(double taijyu){
this.taijyu = taijyu;
}
public void setSincho(double sincho){
this.sincho = sincho;
}
public void setNenrei(int nenrei){
this.nenrei = nenrei;
}
public String getName(){
return name;
}
public double getTaijyu(){
return taijyu;
}

public double getSincho(){
return sincho;
}
public int getNenrei(){
return nenrei;
}
}

public class TestHito{


public static void main(String []args){
Hito[] hito =new Hito[5];
for(int i = 0; i < 5; i++){
hito[i] = new Hito();
}
hito[0].setName("あきら");
hito[1].setName("まみ");
hito[0].setTaijyu(74.3);
hito[1].setTaijyu(44.5);
hito[0].setSincho(184.3);
hito[1].setSincho(168.4);
hito[0].setNenrei(35);
hito[1].setNenrei(28);
ArrayList result = new ArrayList();
result.add(hito[0]);
result.add(hito[1]);
for(int i = 0; i<result.size(); i++){
hito[i]=(Hito)result.get(i);
System.out.println("名前 "+hito[i].getName()+
" 体重 "+hito[i].getTaijyu()+
" 身長 "+hito[i].getSincho()+
" 年齢 "+hito[i].getNenrei());
}

}
}

ほかの方の説明で理解を深めたら、以下のコーディングを打ち込んでコンパイルします。
C:\java\OKWeb>javac TestHito.java
成功したら、

C:\java\OKWeb>java TestHito
で実行してみてください。
C:\java\OKWeb>java TestHito
名前 あきら 体重 74.3 身長 184.3 年齢 35
名前 まみ 体重 44.5 身長 168.4 年齢 28

と表示されます。
先ず動く事で感動を得る事が大切だと思います。
import java.util.*;

class Hito {
private String name;
private double taijyu;
private double sincho;
...続きを読む

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

Q「httpステータス404」というエラーが出ます。

「httpステータス404」というエラーが出ます。

java初心者です、宜しくお願い致します。
EclipseでServletを書いてやりましたが、以下のようなエラーが出ます、
原因はなんでしょうか、宜しくお願い致します。
「httpステータス404-/Servlet%E7%B7%B4%E7%BF%92/ ServOutput」

Aベストアンサー

Not Found
という意味です。
そのファイルが無い。あるいはリンクが間違っています。
詳しくは参考URLをみてください。

参考URL:http://ja.wikipedia.org/wiki/HTTP_404

QdoGetとdoPostの違い

それぞれブラウザからのリクエストの種類に対応する
メソッドがdoGet,doPost。
doGetはブラウザからGETでそのサーブレットに
リクエストがあった時に、処理が始まるメソッド、
doPostは同じようにPOSTを受け取った時に動き出す

・・・・・ということなのですが、
doGetもdoPostも、中身のコーディングの仕方としては
同様でいいのでしょうか?
いま、doGetでリクエストに対応する処理をうけつけて
いるのですが、255バイトまでなのでdoPostのほうが
いいということがかかれていました。

これは、ブラウザ:Servletのメソッドで対応してれば
いいだけで、結局は送信量の違いだけですか?
そのへんがよくわかってないので教えてください。

ちなみに、doGetでやってる処理は、

public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {

//Bean(workBean)のインスタンス作成
wk = new work_Bean();
//Bean処理実行
wk.Work();





//BeanをJSPに渡すためにHttpServletRequestオブジェクトにセット
request.setAttribute("wk",wk) ;

//ViewであるJSPを呼び出す
RequestDispatcher rDispatcher =
request.getRequestDispatcher("/kanri_JSP.jsp");
rDispatcher.forward(request,response);

こんなかんじでしてます。
あとは、ネットで、人のサンプルとかみると
doGetメソッドに処理をかいており、doPostでは
doGet(request,response);として
doGetをよんでたりするんですが、
これは、PostでもGetと同様の処理ができると
いうことですか?
基本的な質問過ぎるかとおもいますがおしえてください。

それぞれブラウザからのリクエストの種類に対応する
メソッドがdoGet,doPost。
doGetはブラウザからGETでそのサーブレットに
リクエストがあった時に、処理が始まるメソッド、
doPostは同じようにPOSTを受け取った時に動き出す

・・・・・ということなのですが、
doGetもdoPostも、中身のコーディングの仕方としては
同様でいいのでしょうか?
いま、doGetでリクエストに対応する処理をうけつけて
いるのですが、255バイトまでなのでdoPostのほうが
いいということがかかれていました。

これは、ブ...続きを読む

Aベストアンサー

GET と POST では、パラメータをプログラムに渡す仕組みが全く違います。
仕組みが違うので渡せるパラメータの大きさが違う、等の違いが出てきます。

ですが、Servlet では、その違いを request オブジェクトが全部隠してくれて
いるので、気にしなくて良いです。つまり、同じことができて、呼出され方が
違う、と。

普通は、html や JSP の方も、Servlet を意識して書くでしょうから、
どちらかだけの実装で良いのですが、汎用的(呼ぶ人を特定しない)な Servlet
を書こうと思ったら、両方を実装しておく、と理解しておけば良いです。


ちなみに、GET で渡せるパラメータの大きさは 255 バイトと決っているわけでは
ないし、POST で渡せるパラメータの大きさに制限が無い、というわけでもあり
ません。

GET の制限は、どちらかというとブラウザ側の実装によって決ってくることで、
POST に制限があるとしたらサーバ側(例えば、Servlet コンテナ)の実装に
よってきます。

QArrayListを使った多次元配列の作成について

ArrayListで可変長配列を扱っているのですが、
2次元可変長配列を用いる必要が出てきたので、
下記のように変更したのですがうまくいきません。
何が悪いのか教えていただけませんでしょうか?

-----------------------------------------
ArrayList cars=new ArrayList();
cars.add("フェラーリ");
cars.add("ポルシェ");
cars.add("メルセデスベンツ");
for(int i=0;i<cars.size();i++){
 String str=(String)cars.get(i);
 System.out.println(str);}
-----------------------------------------
上記から下記のように変更しました。
-----------------------------------------
ArrayList[] cars=new ArrayList[3];
cars[0].add("フェラーリ");
cars[0].add("ポルシェ");
cars[0].add("メルセデスベンツ");
for(int i=0;i<cars[0].size();i++){
 String str=(String)cars[0].get(i);
 System.out.println(str);}
-----------------------------------------
エラーは「Exception in thread "main" java.lang.NullPointerException」です。
どうやら初期配列が10ではなく3となってしまっているようです。

ArrayListで可変長配列を扱っているのですが、
2次元可変長配列を用いる必要が出てきたので、
下記のように変更したのですがうまくいきません。
何が悪いのか教えていただけませんでしょうか?

-----------------------------------------
ArrayList cars=new ArrayList();
cars.add("フェラーリ");
cars.add("ポルシェ");
cars.add("メルセデスベンツ");
for(int i=0;i<cars.size();i++){
 String str=(String)cars.get(i);
 System.out.println(str);}
---------------------------------------...続きを読む

Aベストアンサー

こんにちは。

>ArrayList[] cars=new ArrayList[3];
はArrayList型のオブジェクトのインスタンス
を格納する箱を3個作成しただけなので、
この時点では、
cars[0] = null
cars[1] = null
cars[2] = null
となっています。ですから、当然
cars[0].add("フェラーリ");
などとやると、NullPointerExceptionが
発生します。これをさけるには、
cars[0] = new ArrayList();
cars[1] = new ArrayList();
cars[2] = new ArrayList();
とする必要があります。

QArrayListに格納したクラス内のメンバの呼び出し方法(VB)

お世話になります。VB2003でご質問があります。

通常Arryalistでは下記例1のように使用するのが一般的だと思うのですが、例2のようにArryaListにクラスを追加し、その中のメンバを呼び出すにはどのようにコーディングすればよいのでしょうか?
コメントのコンパイルエラー箇所の部分です。
お手数ですが、ご教授よろしくお願いいたします。

*******************************************
(例1)
Dim Test as new ArrayList
Test.ADD("テスト")
console.writeline(test(0))
*******************************************

*******************************************
(例2)
Public Class A
public strA as string

public sub subTest()
strA = "おはよう"
end sub

End Class

Public Class B
Dim a as new ArrayList

a.Add(new A)
a(0).subTest '--コンパイルエラー箇所
console.writeline(a(0).strA) '--コンパイルエラー箇所

End Class
*******************************************

お世話になります。VB2003でご質問があります。

通常Arryalistでは下記例1のように使用するのが一般的だと思うのですが、例2のようにArryaListにクラスを追加し、その中のメンバを呼び出すにはどのようにコーディングすればよいのでしょうか?
コメントのコンパイルエラー箇所の部分です。
お手数ですが、ご教授よろしくお願いいたします。

*******************************************
(例1)
Dim Test as new ArrayList
Test.ADD("テスト")
console.writeline(test(0))
**************************...続きを読む

Aベストアンサー

ArrayListから取り出したものはすべてオブジェクト型です
適切な型にキャストしてから使用してください

Dim a as new ArrayList
a.Add(new A)
CType(a(0), A).subTest
console.writeline(CType(a(0), A).strA)

QJava-jspの画面入力値保持について

画面にテキスト、ラジオボタン、リストボックス とボタンがあります。
ボタンを押すと、JAVAで処理を行い、jspのviewで表示します。

1.テキスト、ラジオボタン、リストボックスなどに値が入力、設定されている状態で
ボタンを押して処理後にテキスト、ラジオボタン、リストボックスの値が
変わらないようにしたいのですが、
その場合、たとえば、入力、設定値をセッションになどに格納しておき
jspの所で、セッションから値を設定すると言うような方法になるのでしょうか?

2.ボタン押して処理後、ラジオボタン、リストボックスの選択値も
  変えないようにしたいのですが、
  これはどのように実現するのが、適切なのでしょうか?


以上、よろしくお願いします。

Aベストアンサー

ボタンというのはフォームのサブミットボタンのことですよ?
つまり、画面遷移が起きることを前提とすると(元の同じ画面に戻るのも含みます)

テキスト、ラジオボタン、リストボックスの状態を「要求パラメータ」として
送信し、それを次画面に反映するというのが最も一般的な方法です。

フレームワーク struts のアクションフォーム&JSPカスタムタグを使うと比較的楽に
そういう画面が作れますが、多くのフレームワークでも大差ありません。
簡単な画面なら素のサーブレート+JSPでも十分作れます。

セッションでもできますが、 セッションはログイン情報などの保持など、
限定された範囲で使うのが普通です。また、結局セッションに最新の
テキスト、ラジオボタン、リストボックスの状態を送るには、「要求パラメータ」
を送信する必要があります。

AJAXを使うという方法もあります。この場合、ボタンは AJAX 処理だけを行い
画面遷移を起こさないので、サーバ側で画面のテキスト、ラジオボタン、
リストボックスの状態をもつ必要はありません。

QJava 他クラスの呼び出しが上手くいきません。

Java初心者です。
過去Q&Aとして掲載されていた「iアプリでのクラスファイルが複数ある時の画面遷移」と同趣旨のことがしたく、記事を参考にプログラムを組んでみました。
しかし、コンパイルの際、画面遷移のための別クラスファイルを呼び出しインスタンス化するところで生じる「シンボルを見つけられません。」というエラーの原因がつかめず困っています。
作成したプログラムのどこがいけないのか、ご教示いただければ幸いです。

作成したプログラム
=========
Test01.java
=========
import com.nttdocomo.ui.*;

public class Test01 extends IApplication implements ComponentListener{
Button btn1;
Label lbl1;
public void start() {
Panel p1 = new Panel();
p1.setTitle("p1");
Label lbl1=new Label("p1に居ます。");
p1.add(lbl1);
Button btn1=new Button("next");
p1.add(btn1);
p1.setComponentListener(this);
Display.setCurrent(p1);
}
public void componentAction(Component source, int type, int param) {
if(type == ComponentListener.BUTTON_PRESSED) {
if(source==btn1){
Test02 test02 =new Test02(); //ここでエラーが発生します。
Display.setCurrent(test02);
lbl1.setText("p2に遷移");
}
}
}

}

============
Test02.java
============
import com.nttdocomo.ui.*;

public class Test02 extends IApplication implements ComponentListener{
Button btn1;
Label lbl1;
public void start() {
Panel p2 = new Panel();
p2.setTitle("p2");
Label lbl1=new Label("p2に居ます。");
p2.add(lbl1);
Button btn1=new Button("next");
p2.add(btn1);
p2.setComponentListener(this);
Display.setCurrent(p2);
}
public void componentAction(Component source, int type, int param) {
if(type == ComponentListener.BUTTON_PRESSED) {
if(source==btn1){
lbl1.setText("p1に遷移"); //コンパイルエラーは生じませんが、ラベル表示の切り替えができません。
}
}
}

}

Java初心者です。
過去Q&Aとして掲載されていた「iアプリでのクラスファイルが複数ある時の画面遷移」と同趣旨のことがしたく、記事を参考にプログラムを組んでみました。
しかし、コンパイルの際、画面遷移のための別クラスファイルを呼び出しインスタンス化するところで生じる「シンボルを見つけられません。」というエラーの原因がつかめず困っています。
作成したプログラムのどこがいけないのか、ご教示いただければ幸いです。

作成したプログラム
=========
Test01.java
=========
impo...続きを読む

Aベストアンサー

「シンボルを見つけられません。」でコンパイルできないのは、
Test01クラスからTest02クラスを見つけられないことが原因かと思われます。

No.1様は
==
Test01とTest02は同じパッケージですか?
違うのであればTest01にimport xxxx.Test02;を記述する必要がある
==
とおっしゃってるように思います。


原因がご理解できないようでしたら
まずはJavaの勉強をしたほうがよろしいかと思います。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング