• ベストアンサー

args[0]でエラー

ご質問させて頂きます。 以下のコードは、javaでLOOKUPのような昨日のコードを 以前こちらでサンプルとして作成して頂いたものなんですが、 エラーの方がどうしても取れなくて困っています。 String[] value = testMap.getValue(args[0]); の行でエラーになってしまうのですが args[0]の部分を取ると、コンパイルエラーは取れますが 今度は実行エラーになってしまいます。 args[0]が鍵だと思うのですが どのようにすればいいか分かりません。 ご教授して頂けたら幸いです。 --------------------------------- import java.util.*; public class TestMap { /*HashMap生成(クラス変数)*/ private HashMap hashMap = new HashMap(); /*追加:入力キー(クラス変数)*/ private String inputKey = null; ・ ・ ・ ・ public static void main(String args[]){ TestMap testMap = new TestMap(); testMap.setMap(); /*Keyに対応する出力の判断*/ if(testMap.checkKey(args[0])){ ↓↓↓ここでエラー String[] value = testMap.getValue(args[0]); System.out.println("日付:" + value[0] + " 名前:" + value[1]); } else{ System.out.println("対応するKeyが存在しません。"); } } public TestMap() { } ・ ・ ・ ・ /*KeyからValueを返す*/ public String[] getValue(){ String[] value = (String[])hashMap.get(inputKey); return value; } }

  • niiza
  • お礼率43% (211/486)
  • Java
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • takaP-
  • ベストアンサー率79% (83/105)
回答No.2

TestMap クラスの getValue() メソッドは引数を取らない 仕様なのに、testMap.getValue(args[0]) と引数を渡して いるのでコンパイルエラーとなります。 getValue() の処理ではコマンドライン引数は使われてない ので、メソッド呼び出し側の記述ミスかと思われます。 >args[0]の部分を取ると、コンパイルエラーは取れますが >今度は実行エラーになってしまいます。 との事ですが、この手の問題を聞く時は元のソースを提示 してしかるべきかと思います。 事前の事を知らない人にとっては inputKey、checkKey() が何の事なのか知るよしもない事ですからね。 http://www.okweb.ne.jp/kotaeru.php3?q=573712 私が上記のソースの getValue() 引数を変更し、コンパイル 実行をした限りでは、実行時エラーは出ませんでした。 恐らく、コマンド引数を渡していないんじゃないかと。 >java TestMap * 「*」のところに任意の1文字を入れて実行して見て下さい。 余計なお世話かもしれませんが、初心者のうちは出切るだけ 「模範的」なサンプルコードを元にして学習することが 重要だと思います(模範的とはクセのないという意味で) 手持ちの参考書のソースコード等を元に学習された方が 良いかもしれませんね。

niiza
質問者

お礼

ご返事有り難うございました。 お陰様で解決しました。 これからは全部載せるようにしたいと思います。 大変、お手間を取らせてしまって申し訳ありませんでした。

その他の回答 (1)

  • hilo256
  • ベストアンサー率18% (3/16)
回答No.1

こんにちは。 あまり自信はないのですが、いくつか気になったところをお答えさせてもらいます。 まずgetValueメソッドですが、宣言に引数がありませんので testMap.getValue(args[0]); という呼び方には問題があると思います。 あとgetValueメソッドで String[] value = (String[])hashMap.get(inputKey); のinputKeyはnullではないですか? 実行エラーは、いたるところにSystem.out.println() を書いてエラーの場所を特定してみるのがいいと思います。

niiza
質問者

お礼

ご質問させて頂きます。 特に >実行エラーは、いたるところにSystem.out.println() >を書いてエラーの場所を特定してみるのがいいと思います。 は、これから使わせて頂きます。

関連するQ&A

  • hashMap.getについて

    たびたび、ご質問させて頂きます。 申し訳ありません。 hashMap.getについてなんですが 以下のようにhashMapを設定しました。 --------------------- public class TestMap { /*HashMap生成(クラス変数)*/ class MyData{ public String sDate; public String sName; } ・ ・ ・ Key = oStringTokenizer.nextToken(); oMyData.sDate = oStringTokenizer.nextToken(); oMyData.sName = oStringTokenizer.nextToken(); hashMap.put(Key,oMyData); ----------------- データを取り出したいので、(inputKey)=入力キー --------------- String[] value = (String[]) hashMap.get(inputKey); System.out.println("日付:" + value[1] + " 名前:" + value[2]); --------------- と、したんですが、エラーは出ないもののSystem.out.printlnの箇所でなにも表示されません。 たびたび、ご質問させて頂いて本当に申し訳ありませんが、ご教授して頂けたら幸いです。

    • ベストアンサー
    • Java
  • オーバーロードで

    オーバーロードでメソッドgetvalueへコマンドライン引数から取得した値を渡したいのですが、どのようにすればいいのでしょうか。エラー:シンボルが見つけられません。 ×としたところでol.getvalue( args[i] );←ここに値をいれたいのですが、できません。なにか方法はありますでしょうか。 class OverLoad{     void getvalue(Boolean value){   System.out.println("Boolean型:" + value);     }     void getvalue(int value){   System.out.println("int型:" + value);     } public class Capsule{     public static void main(String[] args){   OverLoad ol = new OverLoad(); ×   ol.getvalue( args[i] ); ○   ol.getvalue(false); ○     ol.getvalue(80);     } }

  • args[ ] について

    次の問題についての質問です。 問題: (1)実行時に引数をつけて実行 (2)「引数と同じ値を入力してください」と表示、標準出力を行う。 (3)標準入力された値が、実行時の引数と同じ値だった場合は「正解」と表示 (4)標準入力された値が、実行時の引数と違う値だった場合は「はずれ」と表示 出力結果: C:\>java Hantei test 引数と同じ値を入力して下さい。 test 正解 C:\>java Hantei test 引数と同じ値を入力して下さい。 abc はずれ C:\> 解答例: import java.io.*; class Hantei { public static void main(String[] args)throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("引数と同じ値を入力してください。"); String str = br.readLine(); if(str.equals(args[0])){ System.out.println("正解"); } else{ System.out.println("はずれ"); } } } ************************************************************* この解答例の中の str.equals(args[0]) の部分の意味が分からないので(特にargs[0]が)、 解説していただけたらと思います。 参考書やネットで検索してみたのですが、あまり 載っていなかったので・・・ あと、解答通りに入力したはずなのに ArrayIndexOutOfBoundsExceptionのエラーが出てしまうのは 何故なんでしょう?ちなみにエラーの意味は分かります。 配列要素数を5とかに増やして実行してみたのですが、 それでもダメでした。

    • ベストアンサー
    • Java
  • 自作のクラスファイルがインポート出来ない その2

    同じような質問をしてしまいまして 大変にご迷惑をお掛けしますが ご質問させて頂きます。 以前、皆さんのご協力により 大変に勉強になったんですが まだエラーが取れなくて困っています。 jukou.classとTestMap.classは同じフォルダにあります。jukou.javaからTestMap.javaを呼び出そうとすると、jukou.javaの方で以下のようなコンパイルエラーが表示されてしまいます。 -------------------- jukou.java:85: TestMap の main(java.lang.String[]) は (java.lang.String) に適用 できません。 TestMap.main(\"C\") ; ^ エラー 1 個 --- TestMap.main(\"C\") ; は、TestMap(\"C\") ;の方が正しいと思いますが、こちらでもエラーになります。 以下がコードです。 TestMap.java --- import java.util.*; public class TestMap { /*HashMap生成(クラス変数)*/ class MyData{ public String sDate; public String sName; } private static HashMap hashMap = new HashMap(); /*追加:入力キー(クラス変数)*/ public static String inputKey = null; private String[] keys = {}; public static void main(String SYAINNO[]){ try{ TestMap testMap = new TestMap(); testMap.setMap(\"test.csv\"); /*Keyに対応する出力の判断*/ if(testMap.checkKey(SYAINNO[0])){ ・ ・ ・ public String getStr(){ return \"呼ばれてますよ!\" ; } --- jukou.java -- import java.io.* ; ・ ・ ・ /* LOOKUP用処理 */ else if (req.getParameter(\"map\") != null) { TestMap.main(\"C\") ; } pw.close() ; } ご教授して頂けたら幸いです。

    • ベストアンサー
    • Java
  • HashMap.putについて

    ご質問させて頂きます。 hashMap.putの使い方が良く分かりません。 例えば、以下のようなkudamono.csvファイルがあるとします。 ------------------- A,2003/01/01,スイカ B,2003/02/01,バナナ C,2003/03/01,メロン D,2003/04/01,イチゴ ------------------- このデータをhashMap.putでセットしたいので 以下のようなクラスにしたんですが コンパイルエラーが出てしまいます。 ------------------- /*HashMap生成(クラス変数)*/ public static HashMap hashMap = new HashMap(); public static void main(String args[]) throws Exception { FileReader filereader = new FileReader("kudamono.csv"); BufferedReader bufferedreader = new BufferedReader(filereader); String line; int i = 1; int j = 0; while((line = bufferedreader.readLine()) != null) { System.out.println("Start line at " + i); StringTokenizer stringTokenizerTest = new StringTokenizer(line, ","); while(stringTokenizerTest.hasMoreTokens()) { HashMap.put(stringTokenizerTest.nextToken().toString()); j++; } i++; } filereader.close(); } } --------------- たぶんHashMap.putをする前に キーをセットしたり変数を宣言したりすると思うのですが その辺が良く分かりません。 ご教授して頂けたら幸いです。

    • ベストアンサー
    • Java
  • クラスに行って、戻ってくる方法 その2

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=592441 の方で質問させて頂いて、丁寧に答えて頂いたんですが、どうしても分からないので再度ご質問させて頂きます。 以前お答えして頂いたことから、TestMap.javaとjukou.javaを以下のように変更してみました。 jukou.java ------------- public class jukou extends HttpServlet { public jukou() { String sDate; String sName; } public void init(ServletConfig con) throws ServletException { super.init(con) ; } .... /* LOOKUP用処理 */ else if (req.getParameter("map") != null) { jukou x; x = TestMap.method(strings) ; .... TestMap.java ------------- public class TestMap { /*HashMap生成(クラス変数)*/ class MyData{ public String sDate; public String sName; } .... //呼び出し MyData myData = (MyData) hashMap.get(inputKey); jukou myData2 = new jukou(myData) ; エラー内容 C:\ja>javac jukou.java jukou.java:95: 互換性のない型 検出値 : void 期待値 : jukou x = TestMap.method(strings) ; ^ jukou.java:205: シンボルを解決できません。 シンボル: 変数 pw 場所 : jukou の クラス pw.println("<html><head>") ; ^ jukou.java:206: シンボルを解決できません。 シンボル: 変数 pw 場所 : jukou の クラス pw.println("<title>エラー</title>") ; ^ など9個 この他にも色々なパターンを試してみましたが、エラーが取れません。ご教授して頂けたら幸いです。

    • ベストアンサー
    • Java
  • HashMap要素の操作について

    過去質問を検索致しましたが、適当な質問を見つけられなかった為、質問をさせて頂きます。 ●下記コードのうち、AブロックとBブロックとでどのように異なる為、 Aブロックの値操作が、そのままHashMapへ反省されてしまうのかをご教示願えませんでしょうか? コメント"Aブロック"部分でのArrayList型変数へ操作した内容は、そのままHashMap内の当該キー要素に反映されてしまいます。 コメント"Bブロック"で行う、String型への操作は、HashMap内の当該キー要素に反映はされません。 ■実行環境 ・jdk1.3.1_11 ・Windows XP pro SP2 _________________________________________________ HashMap testMap = new HashMap(); // マップへArrayListとStringを追加 testMap.put("KEY_LIST", new ArrayList()); testMap.put("KEY_STRING", "stringVal"); // Aブロック ArrayList testList = (ArrayList) testMap.get("KEY_LIST"); testList.add("one"); testList.add("two"); testList.remove(0); // Bブロック String testString = (String) testMap.get("KEY_STRING"); testString = "one"; testString = ""; _________________________________________________

    • ベストアンサー
    • Java
  • 出力結果が得られる理由が分かりません

    一つ目のプログラムソース: public class Array{ public static void main(String[] args){ int[] a={1,2,3,4}; int[] b={5,6,7,8}; System.out.print(a[2]); System.out.print(b[2]); b=a; System.out.print(a[2]); System.out.print(b[2]); b[2]=0; System.out.print(a[2]); System.out.print(b[2]); } } 出力結果:  373300 二つ目のプログラムソース: class Box{ private int value; public Box(){value=0;} public Box(int v){setValue(v);} public void setValue(int v){value=v;} public int getValue(){return value;} public Box copy(){ Box b=new Box(); b.setValue(getValue()); return b; } } public class BoxTest{ public static void main(String[] args){ Box x=new Box(1); Box y=new Box(2); Box z=new Box(3); x=z.copy(); y=z; System.out.print(x.getValue()); System.out.print(y.getValue()); System.out.println(z.getValue()); System.out.println(x==y); System.out.println(y==z); System.out.println(z==x); } } 出力結果:  333 false true false この二つのプログラムがどうしてこのような出力結果になるのかが分かりません。 良かったら教えてください。

    • ベストアンサー
    • Java
  • Javaで単方向リスト作成に行き詰まり

    Javaで単方向リストを作成しようとしているのですが、append()で1件目のvalueやnextの値をアクセスするにはどうしたらいいか分かりません。ちなみにmain関数は変更しなくていいようです。 class Chain{ public static void main(String args[]){ //1件目のノードの作成 if(args.length == 0){ System.out.println("パラメータを指定してください"); return; } Node start = new Node(Integer.parseInt(args[0])); //2件目のノード作成 for(int i = 1; i < args.length; i++){ start.append(Integer.parseInt(args[i])); } } } class Node{ //メンバ変数(インスタンス変数) private int value; private Node next; //コンストラクタ public Node(int value, Node next){ this.value = value; this.next = next; } public Node(int value){ this.value = value; } public Node(){ this.value = 0; this.next = null; } //アクセスメソッド(setter, getter) public int getValue(){ return value; } public void setValue(int value){ this.value = value; } public Node getNext(){ return next; } public void setNext(Node n){ this.next = n; } //通常のメソッド //追加する public void append(int v){ Node chain = new Node(); chain.value=chain.getValue(); System.out.println(chain.value); } }

    • ベストアンサー
    • Java
  • 構文がエラーになる

    Exception in thread"main"java.lang.NoClassDefFoundError という文章でエラーになります。 import java.io.*; class Sample34 { public static void main (String args[])throws IOException { System.out.println("整数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int res = Integer.parseInt(str); if(res == 1){ System.out.println("1が入力されました。"); } else if(res == 2){ System.out.println("2が入力されました。"); } else{ System.out.println("1か2を入力してください。"); } } }

専門家に質問してみよう