JavaのHashtableの配列化について質問

このQ&Aのポイント
  • JavaのHashtableの配列化についてわからない事があります。ローカル変数の使い方がおかしいのでしょうか?おかしなことを言っているかもしれません。
  • 最初に宣言したローカル変数oを使い、メインメソッドでその値を決め、その数だけTestメソッドをループさせたいと思っています。しかし、エラーが出てしまい実行できません。
  • Testメソッド内でHashtableを使用して要素を追加し、取得して表示させたいです。具体的には「明日」に対応する「monday」、「明後日」に対応する「tuseday」を表示させたいです。どのように修正すれば良いでしょうか?
回答を見る
  • ベストアンサー

こんばんは!

こんばんは! 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初心者の為、おかしなことを言っているかもしれません>< 宜しければご回答を頂けると有難いです。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

> ローカル変数の使い方がおかしいのでしょうか? いいえ。 クラスの宣言の仕方や変数の定義の仕方などそれ以外のところがおかしいように思います。 | 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");で良いのではないでしょうか?

askman1988
質問者

お礼

夜分遅く有難う御座います! 理解しました!

関連するQ&A

  • プログラムの合体。

    jump7799_4836さん 2018/7/2103:34:44 public class Test2 { public static int メソッド () { System.out.println("メソッド()が呼ばれました"); return 0; } public static int メソッド (int i) { System.out.println("メソッド(int i)が呼ばれました"); return i; } public static int メソッド (int i, int j) { System.out.println("メソッド(int i, int j)が呼ばれました"); return i; } public static int メソッド (short s) { System.out.println("メソッド(short s)が呼ばれました"); return s; } public static int メソッド (double d) { System.out.println("メソッド(double d)が呼ばれました"); return (int) d; } } public メソッド class Test2 { public メソッド static void main(String[] args) { Test2.メソッド (); Test2.メソッド (1); Test2.メソッド (1,2); Test2.メソッド (1.1); Test2.メソッド ((short) 1); Test2.メソッド ((double)1); } } kouzou@GD348ZZD9:/WORK$ javac Test2.java Test2.java:29: エラー: class、interfaceまたはenumがありません public メソッド class Test2 { ^ Test2.java:30: エラー: <identifier>がありません public メソッド static void main(String[] args) { ^ エラー2個 2つのプログラムが合体することってあるのですか? いつもすみません。 解説のほど、宜しくお願い申し上げます。

    • ベストアンサー
    • Java
  • javaのローカル変数について

    基本的なことの質問ですがよろしくお願いいたします。 下記の様なソースコードでint y ;はローカル変数にあたると思いますが 確かローカル変数は初期化されないとコンパイルエラーになるはずなのですが どうもコンパイルも実行もできます。 どうしてでしょうか? よろしくお願いいたします。 class Test1{ static int x = 0; } public class Test extends Test1{ public static void main(String args[]){ Test i = new Test(); int y ; y = ++x; System.out.println( y ) ; } }

    • ベストアンサー
    • Java
  • Javaの初期化メソッドについて

    こんにちは。Javaの初心者です。 Javaの初期化メソッド(initメソッド)についてなのですが、処理を記述しても実行してくれません。 恐らく使い方が間違ってるかと思われるのですが、ネットで調べてもあまり検索結果がでてこなかったので、質問させてもらいました。 以下サンプルコード import java.lang.*; public class Test { static int a; public void init() { a = 10; } public static void main(String[] args) { System.out.println(a); } } 実行してみても、「0」と表示されるだけで、「10」と表示してくれませんでした。 どこかコードが間違えてるのでしょうか? それとも初期化メソッドはアプレット用であってアプレットで使わないと意味がないというものなのでしょうか? 因みに関係ないかと思われますが、グローバル変数は自動的に初期化される(0が代入される)ということは知っています。 ご教授の方、よろしくお願い致します。

    • ベストアンサー
    • Java
  • String typeの引数をつかって 変数はつくれますか?

    いつもお世話になっております。 以下のように、引数を使って、変数をていぎしたいのですが。。。 public static void main(Stirng[] arg){ String hikisuu = "サンプル"; method(hikusuu); } public static void method(String hikisuu){ int hikisuu = 5; } java でこのようなことは可能でしょうか? (実際やったらエラーが出ました...) ほかの方法で、これと同じようなことを実現でくる方法はありますでしょうか? よろしくおねがいします。

    • ベストアンサー
    • Java
  • 【Java】変数?定数?

    ↓のようなjavaのクラスの中で各メソッド毎にMETHODという名の文字列をfinalで定義した場合なのですが、METHODは変数ですか?定数ですか? public class test { public void test1 () { final String METHOD="test1"; system.out.println("メソッド名=" + METHOD); } public void test2 () { final String METHOD="test2"; system.out.println("メソッド名=" + METHOD); } }

    • ベストアンサー
    • Java
  • Java main関数内でStatic変数使えない

    JavaのStatic変数について質問です。 Main関数の中でStaticな変数を定義しようとしたところ、 final修飾子しか使えませんというエラー文言が出ます。 Main関数内でわざわざStatic変数を使用する必要はないのですが、 出来ないと言われると何故だろうと思ってしまいます。 どなたかご説明いただけないでしょうか? -------------------------------------------------------------------- class Test { public static void main(String[] args) { // 宣言時Staticは使えなく、finalでしか定義できないとエラーが出る Static int test_val = 10; // 表示 System.out.println(test_val); } }

    • ベストアンサー
    • Java
  • mainクラス内に書いたメソッドの宣言の仕方(staticの必要性)

    java を勉強中の超初心者です、宜しくお願いします。 main と同じクラスに disp というメソッドを作成してやり、” void disp(int a , int b )”と書いてやりましたが、mainからアクセス出来ません。 そこで、” static void disp(int a , int b )” という風に” static ” を先頭につけてやりましたら、うまく動きました。 これは、mainメソッドから他のメソッドにアクセスする場合には、必ず” static ” をつけてやる必要があるということでしょうか。 ======================================================= class クラス練習 { public static void main(String[] args) { disp(5,10); } /*static*/ void disp(int a , int b ) { System.out.println("a+b = " + (a+b)); } }

    • ベストアンサー
    • Java
  • JAVAコンストラクタについて

    JAVA のコンストラクタ定義の際に、下記のようにコンストラクタにvoidを付けた時と付けない時の処理結果が変わるのはなぜでしょうか。 (1) class O { protected int d; O(){ System.out.println("O = " + d); } } class Study_6_3main_void { public static void main(String args[]) { int i = 1; O OO = new O(); System.out.println("O = "); } } (2) class O { protected int d; void O(){ System.out.println("O = " + d); } } class Study_6_3main_void { public static void main(String args[]) { int i = 1; O OO = new O(); System.out.println("O = "); } } 実行結果 (1) O = 0 O = (2) O = 以上です。回答の程よろしくおねがいします。

    • ベストアンサー
    • Java
  • Javaについて教えてください!

    sampleパッケージに属するMain.javaとSub.javaがあり、Main.javaのmainはSub.javaのsubメソッドを呼び出して「OK」と表示させるプログラムを教えてください! //Main.java package sample; public class Main{ public static void main(String[] args){ Sub.sub(); }} //Sub.java package sample; public class Sub{ static String str = "OK"; public static void sub(){ System.out.println(str); }} String型の変数strはクラス変数で行いたいのですが、どこを改善すれば良いでしょうか?

    • ベストアンサー
    • Java
  • javaのプログラムについての質問です。

    /* * 引数、パラメータ、戻り値を使用して * SubTest19クラスでフィールド変数を使用しないよう、 * 修正して下さい。 * * * また、SubTest19クラスのput()で行っている出力はfor文を使用する事。 * */ class Test19 {   public static void main(String[] args) {   // SubTest19クラスのインスタンス化   SubTest19 st19 = new SubTest19();   // setメソッド呼び出し:戻り値&引数無し   st19.set();   // putメソッド呼び出し:戻り値&引数無し   st19.put();   } } // SubTest19クラス class SubTest19 {   public Test19data t19d[] = null;       // setメソッド    public void set(){     t19d = new Test19data[3];     t19d[0] = new Test19data();     t19d[1] = new Test19data();     t19d[2] = new Test19data();     t19d[0].px = "K-0963";     t19d[0].ct = 23;     t19d[1].px = "T-523363";     t19d[1].ct = 517;     t19d[2].px = "J-97553";     t19d[2].ct = 5;   }     // putメソッド   public void put(){      System.out.println(t19d[0].px);     System.out.println(t19d[0].ct);     System.out.println(t19d[1].px);     System.out.println(t19d[1].ct);     System.out.println(t19d[2].px);     System.out.println(t19d[2].ct);   } } class Test19data{   // フィールド変数の宣言:String,int    public String px;    public int ct;    public Test19data(){       px = "";      ct = 0;    } } このような問題なのですが、どうしても出来ずに手詰まり状態です。丸投げで非常に申し訳ないのですが、どなたか途中までコードを書いて頂けないでしょうか?よろしくお願い致します。