• 締切済み

javaのhashtableに関する質問です

以前にも質問させていただいた者ですが、またどなたかよろしくお願いします。  javaのhashtableを使いたいのですが、ソースコードの中で int a[]= char b[]= Hashtable<int,char> hash=new Hashtable<int,char>();       ~ hash.put(int[a],char[b]); と、put(,)の中にint型とchar型の配列を格納することは可能でしょうか?どうしてもエラーが出てしまいます。   どうしたらいいのでしょうか?

  • Java
  • 回答数2
  • ありがとう数4

みんなの回答

  • HarukaV49
  • ベストアンサー率53% (48/89)
回答No.2

int a[]= ... ; char b[]= ... ; Map<int[], char[]> map = new Hashtable<int[], char[]>();      ~ map.put( a, b ); と書きます。 なお、配列の宣言は int[] a = ...; というふうに書くのが一般的です。処理はどちらも同じですが。

kepo2007
質問者

お礼

ご回答ありがとうございます。

noname#49664
noname#49664
回答No.1

Hashtableは、オブジェクトを管理するものです。従って、プリミティブタイプをそのまま指定することはできません。ラッパークラスを指定し、オブジェクトとして値を収める必要があります。といっても、Java 5.0以降なら、プリミティブタイプはそのままラッパークラスに変換されますから、ラッパークラスを指定してやればそのままプリミティブタイプを代入できます。 int[] n = new int[]{1,2,3}; char[] c = new char[]{'a','b','c'}; Hashtable<Integer,Character> hash=new Hashtable<Integer,Character>(); hash.put(n[0],c[0]); // hash.put(new Integer(n[0]),new Character(c[0])); と同じ

kepo2007
質問者

お礼

ご回答ありがとうございます。

関連するQ&A

  • javaのエラーに関する質問 よろしくお願いします

     こんにちは。どなたかJavaのエラーに詳しい方はどうか教えていただけないでしょうか?本にも載ってなくて、調べようがないので困っています。  エラーの内容は    注 ~の操作は未チェックまたは安全ではありません  注 詳細については -xlint:unchechkedオプションを指定して再コンパイルしてください。    と表示されてしまいます。ソースコードの中に  Hashtable ht=new hashtable(); ~  ht.put( , ); とHashtableを使い、put()に値を入れて実行すると注~のようなエラーが出てしまいます。 全くわかりません。なにをすればいいのでしょうか?どうかよろしくお願いします。

    • ベストアンサー
    • Java
  • GOF本のStrategyのJava版での質問です。

    GOF本のStrategyのJava版での質問です。 下記を実行すると、クラスCompositionのbreakCountの関数を実行した所で、NullPointerExceptionが発生してしまいます。(SimpleCompositorのcomposeの戻り値である1を期待しているのですが?)お分かりになる方、御教示ください。 //ここから public class Main { public static void main(String[] args) { Composition quick = new Composition(new SimpleCompositor()); quick.repair(); } } class Composition { public Composition(Compositor c) { _components = new Vector(); _lineBreaks = new Vector(); } public void repair() { Hashtable natural = new Hashtable(); Hashtable stretchability = new Hashtable(); Hashtable shrinkability = new Hashtable(); int componentCount; Hashtable breaks = new Hashtable(); // 初期化 componentCount = 0; _lineWidth = 0; natural.put("natural1", new Integer(0)); stretchability.put("stretchability1", new Integer(0)); shrinkability.put("shrinkability1", new Integer(0)); breaks.put("breaks1", new Integer(0)); // ブレーク位置を決める int breakCount; breakCount = _compositor.compose( natural, stretchability, shrinkability, componentCount, _lineWidth, breaks ); //  System.out.println(breakCount); } private Compositor _compositor; private Vector _components; private int _componentCount; private int _lineWidth; private Vector _lineBreaks; private int _lineCount; } abstract class Compositor { public Compositor() { } public abstract int compose( Hashtable natural, Hashtable stretch, Hashtable shrink, int componentCount, int lineWidth, Hashtable breaks ); } class SimpleCompositor extends Compositor { public SimpleCompositor() { } public int compose( Hashtable natural, Hashtable stretch, Hashtable shrink, int componentCount, int lineWidth, Hashtable breaks ) { // ... return 1; } }

    • ベストアンサー
    • Java
  • インスタンスの作成について

    下記の方法にてHashtableのインスタンスを作成しようと思ったのですが has1.put("key",1); の場所でNullpointerException が発生します。 has1がNullになってしまうのですが 下記のような手法でインスタンスは作れないのでしょうか。 public class InstanceCreate { Hashtable has1; Hashtable has2; Hashtable has3; public static void main(String[] args) { InstanceCreate instance = new InstanceCreate(); instance.exe(); } public void exe() { Hashtable hash[] = {has1,has2,has3}; for(int i=0; i<hash.length;i++){ hash[i] = new Hashtable(); hash[i].put("key", "value"); } has1.put("key",1); } }

    • ベストアンサー
    • Java
  • javaのパッケージについての質問です。

    すっきりわかるjava入門という本を参考にjavaを勉強しているのですが、 6.3パッケージを利用する という項目でサンプルコードに従って同じファイルの中に package calcapp.main; public class Calc{ public static void main(String[]args){ int a=10;int b=2; int total=calcapp.logics.CalcLogic.tasu(a,b); int delta=calcapp.logics.CalcLogic.hiku(a,b); System.out.println("足したら"+total+"引いたら"+delta); } } と package calcapp.logics; public class CalcLogic{ public static int tasu(int a,int b){ return(a+b); } public static int hiku(int a,int b){ return(a-b); } } という、二つの違うパッケージに入ったソースコードを作って、コンパイルしてみたのですが、 コマンドプロンプトに、javac CalcLogic.javaと打つ方は上手くいくのですが javac Calc.javaの方はパッケージcalcapp.logicsは存在しません、と言われ上手くいきません。 また、javac CalcLogic.java Calc.javaと打つとコンパイルは上手くいくのですが java Calcはexception in thread"main"java.lang.NoClassDefFoundErrorとでて上手くいきません。 長文の上足りない情報があったりするかもしれませんがわからなくて困っているのでどなたか教えていただけると 助かります。よろしくお願いします。

    • ベストアンサー
    • Java
  • Javaのコードのことで質問があります

    中置表記法を後置表記法に変換するプログラムをJavaで作成し、コンパイルには成功したのですが、実行時に Exception in thread "main" java.lang.ArrayIndexOutOfBour at gotPriority.gotPriority(toPostfix.java:31) at toPostfix.main(toPostfix.java:150) というエラーが出てしまい、正常な実行が出来なくて非常に困っています どういうエラーなのかよくわからず、コードの31行目と150行目をよく見てみたのですが、エラーがある理由もよくわかりませんでした。 ご助言くださると助かります ソースコードの内容は import java.io.*; //gotPriorityは、数式の各要素に優先度を与えるメソッドである。 //数式の要素の優先度は、それぞれ下記のようになる。 // 数式の要素 優先度 // ( 4 // 0~9 3 // *,/ 2 // +,- 1 // ) 0 class gotPriority { private char lse[] = {'0','1','2','3','4','5','6','7','8','9','+','-','*','/','(',')','E'}; private int priority[] = {3,3,3,3,3,3,3,3,3,3,1,1,2,2,4,0,-1},i; public int gotPriority(char e) { for(i=0; i<lse.length ; i++ ) { if(e == lse[i]) break; } return priority[i]; } } class stac { char stac[] = new char[100]; char ret; int top = 0; void initStack() { stac[0] = 'E'; } void push(char c) { top++; stac[top] = c; } char pop() { ret = stac[top]; top--; return ret; } char Top() { return stac[top]; } } class toPostfix { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("数式を入力してください"); String str = br.readLine(); System.out.println("数式を後置表記法に変換します"); int a = 0; int i = 0; gotPriority got1 = new gotPriority(); stac stac1 = new stac(); String Ex = new String(str); int Exp = Ex.length(); char Exptext[] = new char[Exp]; char toPostfix[] = new char[Exp]; for(int d=0; d < Exp; d++) { Exptext[d] = Ex.charAt(d); } for(i = 0 ; i < Exp ; i++ ) { while(got1.gotPriority(Exptext[i]) <= got1.gotPriority(stac1.Top()) && stac1.Top() != '(') { toPostfix[a] = stac1.pop(); a++; } if(Exptext[i] != ')') { stac1.push(Exptext[i]); } else { stac1.pop(); } } boolean sflag = true; for( ; sflag == true ; ) { char ret = stac1.pop(); if(ret != 'E') { toPostfix[a] = ret; a++; } else { sflag = false; } } for(a = 0 ; a < Exp ; a++ ) { System.out.print(toPostfix[a]); } } } です

  • javaプログラミングについて

    char配列に入っている文字を別のchar配列へ逆向きにfor文で代入するソースを教えてください。 例:char1[a,b,c]→char2[c,b,a] うまく説明できているかわかりませんがよろしくお願いします。

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

    javaのプログラムで char型の配列に格納した文字を String型の変数に格納できる関数を教えてください 具体的な使い方も教えていただけるとうれしいです

    • ベストアンサー
    • Java
  • javaの配列

    javaの配列なんですが、配列の全要素一気にメソッドを実行させることができますか? 例えば、 Turtle[] hm = new Turtle[3]; for(int i = 0; i < 3; i++){ hm[i] = new Turtle(); } と配列を生成し、fd(int s)←[sピクセル前進]というメソッドを配列の全部の要素を順番ごとにではなく全部同時に実行させたい場合、コードはどのように書けばよいのでしょうか?

    • ベストアンサー
    • Java
  • java

    Base64にエンコードしたものをデコードするプログラムです。(汎用性が低いのは仕様です)コンパイルは通ったのですが、実行したら以下のエラーが出てきました。 C:\Users\Owner\Documents\javadev>java Base64Decode2 hello.dat hello2.txt java.lang.ArrayIndexOutOfBoundsException: 97 at Base64Decode2.decode(Base64Decode2.java:51) at Base64Decode2.main(Base64Decode2.java:23) 指定の行を見ても原因がよく分かりません。とても初歩的な質問なのかもしれませんが、お願いします。 以下がプログラムコードです import java.io.*; public class Base64Decode2 { public static void main(String[] args) { // 変換テーブル char[] table = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'}; InputStream in = null; // 入力データ OutputStream out = null; // 出力先 try { in = new FileInputStream(args[0]); out = new FileOutputStream(args[1]); char[] cs; while ((cs=read4(in)) != null) { int[] buf = decode(cs, table);//ここが問題? for (int i=0; i<buf.length; i++) { System.out.print(buf[i]+", "); } System.out.println(); int[] buf2 = convert6to8(buf); write3(out, buf2); } } catch (Exception e) { e.printStackTrace(); // 例外の情報を表示する } finally { // in, out を閉じる try { in.close(); out.close(); } catch (Exception e) { } } } /** * 8ビットの2進数の列を復号化する. * @param cs * @param table 符号テーブル * @return */ public static int[] decode(char[] cs, char[] table) { int[] buf = new int[cs.length]; for (int i=0; i<buf.length; i++) { buf[i] = table[cs[i]];//ここが問題? } return buf; } public static int[] convert6to8(int[] buf) { String b; int[] buf2; if (buf.length == 2) { b = toBinary(buf[0], 6); buf2 = new int[1]; buf2[0] = fromBinary(b.substring(0, 8)); } else if (buf.length == 3) { b = toBinary(buf[0], 6) + toBinary(buf[1], 6); buf2 = new int[2]; buf2[0] = fromBinary(b.substring(0, 8)); buf2[1] = fromBinary(b.substring(8, 16)); } else { b = toBinary(buf[0], 6) + toBinary(buf[1], 6) + toBinary(buf[2], 6); buf2 = new int[3]; buf2[0] = fromBinary(b.substring(0, 8)); buf2[1] = fromBinary(b.substring(8, 16)); buf2[2] = fromBinary(b.substring(16, 24)); } return buf2; } /** * バイト列 bt の数を順に出力する. * @param bt 数の配列。長さは 3以下. 各数は8ビットの整数 */ public static void write3(OutputStream out, int[] bt) throws IOException { for (int i=0; i<3; i++) { if (i<bt.length) { out.write(bt[i]); } } } /** * in から文字を最大4つ読み出す. * @param in 入力ストリーム * @return 文字の配列。配列長は最大4. 入力終了したときには null を返す. */ public static char[] read4(InputStream in) throws IOException { char[] bs; int n0=in.read(); int n1=in.read(); int n2=in.read(); int n3=in.read(); if (n0 < 0) { // 読み込み終了 bs = null; } else if (n2 < 0 || (char) n2=='=') { bs = new char[2]; bs[0] = (char) n0; bs[1] = (char) n1; } else if (n3 < 0 || (char) n3=='=') { bs = new char[3]; bs[0] = (char) n0; bs[1] = (char) n1; bs[2] = (char) n2; } else { bs = new char[4]; bs[0] = (char) n0; bs[1] = (char) n1; bs[2] = (char) n2; bs[3] = (char) n3; } return bs; } /** * 数を読み取って、nビットの2進数を表す文字列に変換する * @param bt 1バイトの数 * @param n 2進数のビット数 * @return 2進数を表す文字列 */ public static String toBinary(int bt, int n) { String s = Integer.toBinaryString(bt); for (int i=s.length(); i<n; i++) { s = "0" + s; } return s; } /** * 2進数を表す文字列を数に変換する * @param b 2進数を表す文字列 * @return b が表す数 */ public static int fromBinary(String b) { return Integer.parseInt(b, 2); } }

    • ベストアンサー
    • Java
  • java

    こんにちは。 javaの初心者で、現在、javaのプログラムを作成中ですが、テキストフェイルのデータの BufferedReaderで読み込んだあとどうやって分割し、int型配列に格納しますか? 先輩たち よろしく お願いいたします。

専門家に質問してみよう