解決済みの質問
こんばんは!
JavaのHashtableの配列化についてわからない事があったので質問させて頂きます。
以下、コードです。
__________________________________________________________________________________________
public static int o;
public static Hashtable[] hashArray = new Hashtable[o];
public static void Test() {
hashArray[o].put("明日", "monday");
hashArray[o].put("明後日", "tuseday");
System.out.println(hashArray[o].get("明日"));
System.out.println(hashArray[o].get("明後日"));
}
public static void main(String[] args) {
String s = JOptionPane.showInputDialog("何個のデータを作成しますか?");
int size = Integer.parseInt(s);
for (o = 0; o < size; o++) {
Test();
}
}
__________________________________________________________________________________________
最初にローカル変数のoを宣言し、それをメインメソッドで中身をきめ、その分だけTestメソッドをループさせて
monday
tuseday
を表示させたいのですが、エラーが出てしまいできません。
ローカル変数の使い方がおかしいのでしょうか?
Java初心者の為、おかしなことを言っているかもしれません><
宜しければご回答を頂けると有難いです。
宜しくお願い致します。
投稿日時 - 2010-01-11 02:42:30
> ローカル変数の使い方がおかしいのでしょうか?
いいえ。
クラスの宣言の仕方や変数の定義の仕方などそれ以外のところがおかしいように思います。
| import java.util.Hashtable;
と
| public class ファイル名から.javaをとったもの {
と
| }
が無いように思うのですが、これは省略しているのでしょうか?
> 最初にローカル変数のoを宣言し、それをメインメソッドで中身をきめ、その分だけTestメソッドをループさせて
というなら、メインメソッドでHashtableクラスの配列もnewし、配列の中身のインスタンスもnewしてあげた方が良いと思います。
> public static int o;
> public static Hashtable[] hashArray = new Hashtable[o];
について、
class変数としてoとhashArrayを定義していると思いますが、class変数の作成はclassを生成したとき(static変数以外の場合)かJavaのプログラムを実行したとき(static変数の場合)に行われます。
今回、static変数なのでこのプログラムを実行したときに初期化を行いますが、oが決まっていないのでnew Hashtable[o]でどの大きさの配列を作っていいかわからず、エラーになると思います。
また、hashArrayを実際に使うときにはhashArray[0]などにhashArray[0] = new Hashtable();するなどして、Hashtableクラスのインスタンスを予め代入しておく必要がありますが、プログラムを見る限りHashtableクラスのインスタンス生成は行われていないようです。
また、表示例のような表示にするには、Hashtableクラスの変数及びインスタンスは必要でも、Hashtableクラスの配列は必要ないように思います。(これは誤解している可能性が高いので、このプログラムでやろうとしていることをもう少し詳しく説明してください。)
Hashtable hash = new Hashtable();としてHashtableクラスのインスタンスをhashに代入し、Hashtableのインスタンスへのデータの追加、削除はhash.put("月曜日","monday");で良いのではないでしょうか?
投稿日時 - 2010-01-11 03:34:45
お礼
夜分遅く有難う御座います!
理解しました!
投稿日時 - 2010-01-11 04:02:01
0人が「このQ&Aが役に立った」と投票しています