人に聞けない痔の悩み、これでスッキリ >>

いつもお世話になっております。
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));だと文字化けします。
アドバイスお願いします。そういったことを書いてあるサイト等ご存知でしたらお願いします。

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

A 回答 (4件)

>11の配列にデータ(String)を入力し(ここでは省略)、11すべてをVectorへいれ、String型で取り出したいのですがエラーになります。



>しかしながらどうしてもうまくいきません・・

>試していますがうまくいきません。

>勉強になりました。しかしながらまだうまくいきません。


エラーが出るのなら、エラーの内容を書きましょう。
「うまくいきません。」と書かれても、それを見たって何がどううまくいかないのか分かりません。

それにもしかしたら質問者さんが
「うまくいかない。」
と思っているだけで、javaとしては正しい動きをしているかもしれません。

質問の仕方として、
・どうしたい。
・実行した内容。可能ならばソースをつける。
・実行結果。エラーが出るならエラーの内容を全てつける。
・自分で試したことがあるのならその内容と結果。
・自分の環境(OS、javaのバージョン、ミドルのバージョンなど)

#個人的には
#「お礼」で「ありがとうございました。できました。」
#と書くよりは解決した内容をまとめて書いて
#同じように悩んでいる人の助けになるようにするのがいいと思う。


では本題。
>11の配列にデータ(String)を入力し(ここでは省略)、
>11すべてをVectorへいれ、String型で取り出したい
ということなので、きっと
vecotr.get(1);
とすると
array[1]
の文字列が取得したいんですよね?

以下上記仮定より
配列arrayの全要素をvectorにセットするには
for(int i = 0;i < array.length;i++){
  vector.add(array[i]);
}
とします。
逆に文字列をvectorから取り出して表示するには
for(int i = 0;i < vector.size();i++){
  System.out.println(""+i+"番目の要素:["+(String)vector.get(i)+"]");
}
とします。

で、JAVAのAPIは読みましたか?
読んでいただくと分かると思いますが、
Vectorクラスのget(int i)メソッドで返ってくるのは
Object
です。
ですので文字列として扱いたいのならStringにキャストしてあげないといけません。
(いや、暗黙的にtoString()が呼ばれるか?あっ、でも配列オブジェクトとして突っ込んでるから、文字化けに見えるのか。)

これまたAPIを読んでいただくとわかるのですが、
VectorクラスのaddElement(Object obj)メソッド

指定の要素を最後に追加し…
なので、引数のobjは「1つの要素」として扱われます。
addElementの引数にarrayを指定すると、Vectorの最後番目に「配列まるごと」を入れていることになります。
ですので取り出すときには#3さん、#2さんの仰るようにString配列にキャストしてあげないといけません。

以上長々と失礼しました。
    • good
    • 0
この回答へのお礼

pcbeginner様、アドバイスありがとうございました。
JAVAのAPIを読んで自分なりに納得しました。
ClassCastException がエラーとして表示されていました。

質問の仕方が悪く申し訳ありませんでした。今後気をつけます。

お礼日時:2005/06/16 16:45

vector.addElement(array);


for (int j = 0; j < vector.size(); j++) {
String[] str = (String[]) vector.get(j);
for (int i = 0; i < str.length; i++) {
System.out.println(str[i]);
}
}
こんなに取得すればどうですか?
    • good
    • 0
この回答へのお礼

jch様ありがとうございます。
勉強になりました。しかしながらまだうまくいきません。
現在デバック中です。
取り急ぎお礼まで

お礼日時:2005/06/15 16:51



Vector.addElement(String[])
だと、Vectorに入るのはString[]ではないの?
なので、取り出すときには、
String[] str = (String[])vector.get(0);
System.out.println(str[1]);
という風に、String[]型で取得して、入れた時の範囲を超えない配列番号でアクセスしないといけない。
配列の中身を自動でVectorのアイテムにしてくれるわけではないからね。あくまで、addElementした時の型で入っている。
    • good
    • 0
この回答へのお礼

anmochi様ありがとうございます。
試していますがうまくいきません。
取り急ぎお礼まで

お礼日時:2005/06/15 16:21

Vector.addElement()の使い方が間違っています。



for(int index = 0; index < 11; index++) {
vector.addElement(array[index]);
}

細かく書かれていたのでもう正解書いちゃいますけど、どのように間違っていたのか、御自分でちゃんと理解してから進んでくださいね。

http://java.sun.com/j2se/1.4/ja/docs/ja/index.html
http://www.wakhok.ac.jp/~tatsuo/kougi99/
http://www.gimlay.org/~javafaq/
    • good
    • 0
この回答へのお礼

keroro001様 早速ありがとうございます。
しかしながらどうしてもうまくいきません・・
うまくいきましたらご連絡します。

取り急ぎお礼まで。

お礼日時:2005/06/15 15:06

このQ&Aに関連する人気のQ&A

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

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

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

QVectorとArrayListの違い

お世話になっています。

VectorとArrayListやHashTableとHashMapなど、同期型と非同期型のクラスなどありますよね。

これらは具体的にどのようなときに使い分ければ良いのでしょうか?
私の考えでは、どの場面でもArrayListやHashMapを使っても問題ないと思ってしまいます。

マルチスレッドでスレッドが生成される前に生成されたListオブジェクトを参照した場合には予想と異なる動きをしそうですが、それ以外では全く問題ないように思います。

どの様に使い分ければよいのでしょうか?

Aベストアンサー

同期を取るべき時というのは、複数スレッドが
同時にそのListにアクセスする可能性があるときです。

下のコードは本来 ArrayList を使うべきではありません。
実行すると、リスト内でインデックスなどの整合性
が破壊され add メソッドが例外をスローします。


// 製品クラス
static class Product() {
}

public static void main(String[] args) {

 // 製品を保管する倉庫
 final List wareHouse = new ArrayList();

 for (int i=0; i<10; i++) {

  // 製品を作って倉庫に保管するスレッド
  new Thread() {
   public void run() {
    while (true) {
     wareHouse.add(new Product());
    }
   }
  }.start();

 }

}


new ArrayList()

Collections.synchronizedList(new ArrayList())

と変更すればエラーはでなくなります。
Vector でもいいですが。

同期を取るべき時というのは、複数スレッドが
同時にそのListにアクセスする可能性があるときです。

下のコードは本来 ArrayList を使うべきではありません。
実行すると、リスト内でインデックスなどの整合性
が破壊され add メソッドが例外をスローします。


// 製品クラス
static class Product() {
}

public static void main(String[] args) {

 // 製品を保管する倉庫
 final List wareHouse = new ArrayList();

 for (int i=0; i<10; i++) {

  // 製品を作って倉庫に保管する...続きを読む

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になっていますね。
これはエラー表示をよく見ることで意外と簡単に解決できるのです。
ゆっくり丁寧にエラー表示を見るように心がけることが大事ですよ。

QVectorと配列

お世話になります。

GUIから3つのString文字列を受け取り、追加ボタンを押した時点でVector(List)に格納し、登録ボタンを押してはじめてDBにデータを格納させたいのですが、

Vector list = new Vector();
String addData[] = {txta.getText(), txtb.getText(), txtc.getText()};
for(int i=0; i<addData.length; i++){
list.addElement(addData[i]);
}

しかし、連続してデータを追加するとlistには
{data1,data2,data3,data4,data5,data6}
のように入ってしまいます。
これを
{data1,data2,data3}
{data4,data5,data6}
のようにlistに格納するにはどうすればいいでしょうか?

ご教授頂ければ幸いです。
よろしくお願いします。

Aベストアンサー

こんにちは。
「String配列の要素を順番に格納している」ことを単に2回、3回と繰り返しているだけですので、結果としてStringが要素のVectorになるのです。
Vectorに格納するときにわざわざ要素ごとにばらさず、String配列をそのままいれれば、題意を満たすはずです。
Vectorから取得する際には、いまはおそらくStringにキャストしているでしょうが、String[]にキャストすれば再びString配列として利用できます。

Qvectorの内容をString型に変換したい

VECTORの内容をString型に変換したいです。
どうしたら良いでしょうか?

Aベストアンサー

VECTORとは、java.utilパッケージのVectorクラスと考えてよろしいでしょうか。
Vectorオブジェクトにはどんなオブジェクトがある要素となっているのかわかりませんのでアドバイスを。

1.Vectorの各要素はelementAt(int)メソッドで参照できます。引数は0以上要素数未満です。戻り型はObjectです。
2.Vectorに格納されている要素数はsize()メソッドで取得できます。
3.1と2の情報からfor文が使えそうですね。

以下のURLは、SunのAPI(のVectorクラスの)ドキュメントです。

参考URL:http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/util/Vector.html

QStringBufferからStringへキャストする

StringBufferからStringへキャストする方法としてどちらを用いるのが一般的なのでしょうか
StringBuffer sb
として
public String ***(***)メソッドの最後に

1. return sb.toString()とする
2. return new String(sb)とする

私は1を使っていたのですが、
Javaの規約だか処理能力が良い方法だかに
厳しい人が2を使っていたので少し戸惑う程度ですが…
回答よろしくお願いします。

Aベストアンサー

toString()メソッドは全てのClassのスーパクラスであるObjectクラスのメソッドです。
その他のクラスのtoString()メソッドは、これをオーバライドしたに過ぎません。
toString()メソッドの用途はそのオブジェクトを視覚的にあらわすときに利用します。オブジェクトのダンプイメージです。
今回はStringBufferクラスのtoString()メソッドのためダンプイメージがStringそのもののため問題ありませんが、
「Stringにキャストする」と明示的に処理するには2を使用するのが正解と思います。
格クラスのtoString()メソッドはDEBUGで画面やファイルに出力するときに使用すると考えたほうが賢明と思います。

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は、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

Qequalsの逆

javaで、文字列の場合は比較演算子の「==」は用いずに

if ((str1.getText()).equals(str2)){
(※…str1,2は文字列)

と書きますよね?
この逆で、文字列str1とstr2は等しくないとき、にはif以下の条件文をどのように書けばよいでしょうか?

Aベストアンサー

>if !((str1.getText()).equals(str2)){

あくまで
if(){
}


!(str1.getText()).equals(str2)
が入っているので
if !((str1.getText()).equals(str2)){
じゃなくて
if (!(str1.getText()).equals(str2)){
こう。

Qjavaの中でaddElementは何ですか?

javaの中でaddElementは何ですか?

import java.util.*;
public class StringVector{
public static void main(String[] args){
Vector<String> v = new Vector<String>();
v.addElement("hello");
v.addElement("World");
for(String s : v){
System.out.println(s);
}}}

http://java.sun.com/javase/ja/6/docs/ja/api/

でも探してみましたが。。

Aベストアンサー

>探してみましたが。。
が、なんなのでしょう?

指定された要素を Vector の最後に追加し、サイズを 1 増やします。サイズが Vector の容量より大きくなるときは容量が増やされます。
このメソッドは機能的に add(E) メソッドと同じです。これは、List インタフェースの一部です。

とありますが、この意味がわからないということなのでしょうか?

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

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

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

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


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

Aベストアンサー

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

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

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

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

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

QJSP + ラジオボタン

JSP+Servlet+Beanで作ってます。
JBuilder5を使ってます。

JSPはラジオボタン、テキスト、ボタン等があります。
<INPUT TYPE = "radio" NAME = "r1" VALUE = "ins">A
<INPUT TYPE = "radio" NAME = "r1" VALUE = "upd">B
<INPUT TYPE = "radio" NAME = "r1" VALUE = "del">C

としています。
たとえば、Bを選択時、ボタンクリックで
Servletにリクエストを送信しますが、
Servletから再びJSPを呼び出し、画面を
表示するとき、ラジオボタンはBを選択
させたいのですが、どうしたらいいですか?
FormタグのCHECKEDというオプションを
どのように使えばいいのか教えていただきたいのですが。


テキストには、Beanでsetメソッド、
JSPでは、<jsp:getProperty・・・>を使って
セットできているんですが、ラジオボタンも
同様ですか?
@@@・・・JSPのタグを勉強しないといけないです。
@@@勉強不足です。

JSP+Servlet+Beanで作ってます。
JBuilder5を使ってます。

JSPはラジオボタン、テキスト、ボタン等があります。
<INPUT TYPE = "radio" NAME = "r1" VALUE = "ins">A
<INPUT TYPE = "radio" NAME = "r1" VALUE = "upd">B
<INPUT TYPE = "radio" NAME = "r1" VALUE = "del">C

としています。
たとえば、Bを選択時、ボタンクリックで
Servletにリクエストを送信しますが、
Servletから再びJSPを呼び出し、画面を
表示するとき、ラジオボタンはBを選択
させたいの...続きを読む

Aベストアンサー

<% %>のなかに
<jsp:getProperty name="wk" property="aaa" />
のようなJSPタグを使用することはできません。
これはエラーになります。

wkがBeanのインスタンス名、aaaがプロパティ名なので
<% if(wk.getAaa()==1){ out.print("checked");} %>

でよいと思いますが・・・


人気Q&Aランキング