• ベストアンサー

コマンドライン引数の掛け算のプログラムを教えて下さい。

コマンドライン引数で*で掛け算するプログラムを作成しています。 「"*"」の入力なしに c:\myweb\keisanmain>java myweb.Keisanmain.Keisan 1 * 2 を実行してくれる掛け算のプログラムを自分なりにここまで作成しました。 実行の結果 c:\myweb\keisanmain>java myweb.Keisanmain.Keisan 1 * 2 Exception in thread "main" java.lang.NoClassDefFoundError: myweb/Keisanmain/Keisan というバグがでます。 どうかわかる方お時間があるときに教えて下さい。 package myweb.keisanmain; class Mainkeisan{ public static void main (String args[]){ if(args.length == 0){ }else if(args.length == 1){ }else if(args.length == 2){ }else if(args.length == 3){ /** *c:\myweb\keisanmain>java myweb.Keisanmain.Keisan 1 * 2 Exception in thread "main" java.lang.NoClassDefFoundError: myweb/Keisanmain/Keis an */ double num =0.0; Integer a = new Integer("args[0] * args[1]"); double b = a.doubleValue(); System.out.println(b); } } }

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.13

#12>catchのところをExceptionクラスからRuntimeException です。 #12>どうもcatch してないらしいです。 System.out.println は、例外をスローしません。 parseInt は、例外として NumberFormatException をスローします >たんに入力した文字を数値として返しているようですね。これではargs[2]の意味がありません。 については、意味がわかりません。 再三言っているのに >Integer b = Integer.parseInt(args[1]); しているのはなぜですか

rubi7
質問者

補足

エラーのとりかたを教えていただいて恐縮します。 なぜ変えなかったかは私がそこの意味をしっかり 理解しれなかったからです。教えていただいているのにわからないまま書くのではBLUEPIXYさんをはじめ 皆様にエラーの意味をわかってからソースをそのまま 書きお返事をまずは書きたかったのです。いらいらさせてすいません。本当にごめんなさい。反省しております。今度出すときはもう少しましなソースを だします。最近皆様にたてつづけに聞いているので 毎日でなく数日おきに聞きます。それではここでまた質問するときはどうぞよろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (15)

  • h-r
  • ベストアンサー率0% (0/1)
回答No.5

ANo.4の回答の補足より Double型で取得→計算→出力 とされたいのではないかと推察いたしました。 (違っていたらすみません) ANo.3の回答と同じく型変換で簡単にできます。 Double result = Double.parseDouble(args[0]) * Double.parseDouble(args[2]); System.out.println(result); 上記記述で行えます。 なお、記述の意図はわかりませんが、エラーが発生するのはif文の構文が間違っているからです。 誤:if(a == b) || (b == c){} 正:if(a == b || b == c){} 補足ですがここもおかしいですね。 >Integer b = new Integer("*"); 参考URLにJavaの説明がわかりやすく記載されているサイトを紹介させていただきましたので、こちらを参考にされてみてはいかがでしょうか?

参考URL:
http://takeoba.cool.ne.jp/java/index.htm
rubi7
質問者

補足

h-rさん初めまして!!素敵なサイトの紹介ありがとうございます。よくこれから活用したいと思います。 伺いたいのですがアフタリスク「*」でどうしても 掛け算したいのですがまずはコマンドライン引数 1*2 →args[0] args[1] args[2]とセットして 掛け算するプログラムを作成して実行してみましたが バグがでます。どこかおかしいか見てくださいませんか。他にわかる方もどうか教えて下さい。 作成したプログラム ーーーーーーーーーーー package myweb.keisanmain; class Mainkeisan{ 実行結果C:\>java Mainekeisan 1 * 2 Exception in thread "main" java.lang.NoClassDefFoundError: Mainekeisan public static void main (String args[]){ if(args.length == 0){ }else if(args.length == 1){ }else if(args.length == 2){ }else if(args.length == 3){ double num =0.0; Integer a = new Integer(args[0]); Integer b = new Integer(args[1]); Integer c = new Integer(args[2]); if(a == b || b == c) {    double d = a.doubleValue(); double f = c.doubleValue(); try{ System.out.println(num = d * f); }catch(Exception e){ System.out.println("数字を入力してください。"); System.out.println("入力例:java Mainkeisan 1 1"); }finally{ } } } } } 実行結果がバグがでます。 C:\>java Mainekeisan 1 * 2 Exception in thread "main" java.lang.NoClassDefFoundError: Mainekeisan

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

#1>c:\myweb\keisanmain>java myweb.Keisanmain.Keisan 1 * 2 今いるディレクトリからパッケージ階層をたどろうとするので、 Cドライブの直下で c:\>java myweb.keisanmain.Mainkeisan 1 "*" 2 とします。 * は、(少なくとも)windows では、特別な記号なので、エスケープする必要があります。 数値の取り出しについては例えば、以下のようにして下さい。 double num = 0.0; Integer a = new Integer(args[0]); Integer b = new Integer(args[2]); num = a * b; System.out.println(num);

rubi7
質問者

補足

お返事ありがとうございます。 BULUPIXYさんのソースを参考にして 「*」はアスタリスクなので「"1""*""2"] というアルゴリズムで作成したらコンパイルエラー でて調べたのですがどうやってもとれません。 わかる方どうか教えて下さい。 package myweb.keisanmain; class Mainkeisan{ public static void main (String args[]){ if(args.length == 0){ }else if(args.length == 1){ }else if(args.length == 2){ }else if(args.length == 3){ double num =0.0; Integer a = new Integer(args[0]); Integer b = new Integer("*"); Integer c = new Integer(args[2]); if(a == b) || (b == c) //(1)ここでコンパイラエラーが起こります。 /**C:\myweb\keisanmain>javac -d ./ Mainkeisan.java Mainkeisan.java:22: 式の開始が不正です。 if(a == b) || (b == c)         */ ^ double d = a.doubleValue(); double e = c.doubleValue(); System.out.println(num = d * e); } } }

全文を見る
すると、全ての回答が全文表示されます。
  • kscKane
  • ベストアンサー率62% (18/29)
回答No.3

補足です。 Integer a = new Integer("args[0] * args[2]"); の部分は、 "args[0] * args[2]" と言う文字列をInteger型に変換しようとしています。 ここでは、String型の引数を一つ一つ数字型に変換してから掛け合わせる、と言う処理をしなければ行けないと思います。 自分なら、 int result = Integer.parseInt(args[0]) * Integer.parseInt(args[2]); のような形にしますかね?

rubi7
質問者

お礼

こんばんわ。kscKaneさん詳しい補足をまたまた ありがとうございます。 なるほど!!文字を数値につっこんでも無意味です よね!!ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • kscKane
  • ベストアンサー率62% (18/29)
回答No.2

まず、パッケージ宣言が"myweb.keisanmain"になっているので、 コマンドラインから実行する際は、カレントディレクトリの下に \myweb\keisanmain というディレクトリがくるところに移動する必要があるのでないかな?と思います。 この場合は、C:ドライブの直下ですね。 なので、 "CD \" と入力して、プロンプトが C:\> と表示する状態にして、そこで実行してみてください。 また、今回の実行コマンドが引数との間にスペースがないため、 Mainkeisan1 と言うクラス指定になっています。 引数とクラス名のスペースを忘れないようにしましょう。

rubi7
質問者

補足

kscKaneさん。早速お返事ありがとうございます。そして詳しい説明ありがとうございました。 CDコマンド存在すら知りませんでしたので勉強 になりました。  ところで以下のkscKaneの説明を ソースに反映したいのですが解釈がよくわからなく 作れません。もう少し具体的にアドバイス いただけませんか。是非お願い申し上げます。 >また、今回の実行コマンドが引数との間にスペースがないため、 Mainkeisan1 と言うクラス指定になっています。 引数とクラス名のスペースを忘れないようにしましょう。

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

NoClassDefFoundError になるのは、Mainkeisan なのに、myweb.Keisanmain.Keisan とよびだしているからでしょうね。 また、package myweb.keisanmain となってるからパッケージ名も違いますね。 new Integer("args[0] * args[1]"); の部分も文字列としてargs の内容じゃなく、単なる変数名の文字列ですよね。 それに、args[1] は、 * じゃないでしょうか?

rubi7
質問者

補足

BULUEPIXYさん。いつもお返事ありがとう ございます。毎回丁寧でうれしいです。 パッケージは「C:\myweb\keisanmain」のディレクトリ 構成なのでいいと思うのですが。。。 エラーがやはりでます。 c:\myweb\keisanmain>javac -d ./ Mainkeisan.java c:\myweb\keisanmain>java myweb.keisanmain.Mainkeisan1 * 2 Exception in thread "main" java.lang.NoClassDefFoundError: myweb/keisanmain/Main keisan1 ソースはpackage myweb.keisanmain; class Mainkeisan{ public static void main (String args[]){ if(args.length == 0){ }else if(args.length == 1){ }else if(args.length == 2){ }else if(args.length == 3){ /** *c:\myweb\keisanmain>java myweb.Keisanmain.Keisan 1 * 2 Exception in thread "main" java.lang.NoClassDefFoundError: myweb/Keisanmain/Keis an */ double num =0.0; Integer a = new Integer("args[0] * args[2]"); double b = a.doubleValue(); System.out.println(b); } } } と配列のところだけ変更しました。 是非お手数をおかけしますがわかる方教えて下さい。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ビット演算子が使えない。

    こんにちは現在Javaをやっているいのですが、 //計算を行うプログラムです。 public class keisan{ public static void main(String args[]){ int num1=10; int num2=15; System.out.println("num1とnum2にいろんな演算を行っています。"); System.out.println("num1+num2は"+(num1 | num2)+"です。"); } } コンパイルはできましたが、 Exception in thread "main" java.lang.NoClassDefFoundError: keisan[ とエラーがでてきます。どうしたら良いのでしょうか? お願いします。

    • ベストアンサー
    • Java
  • 前に実行できたプログラムが全て実行できなくなりました。

    コマンドプロンプトを使って、プログラムを実行しようとしてます。 例で 「Aisatsu.java」というプログラムをやってみると C:\WORK>java Aisatsu.java C:\WORK>java Aisatsu Exception in thread "main" java.lang.NoClassDefFoundError: Aisatsu といったエラーが出てきます。どうして今まで出来ていたプログラムが出来なくなっているのでしょうか?

    • ベストアンサー
    • 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を入力してください。"); } } }

  • 超初心者です。教えてください。

    初心者です。javaのマニュアル書に書いてある class Hello{ public static void main (String[] args){ System.out.println("Hi! Hello!!"); } }   はコンパイルすることができたのですが、実行すると Exception in thread "main"java.lang.NoClassDefFoundError: Hello という文書が出てきますどうすればいいのでしょうか。教えてください。

    • ベストアンサー
    • Java
  • コマンドライン引数

    すいません、java初心者です。 コマンドライン引数として渡されたファイルを16進表示したいのですが、右のテキスト部分の文字のあいうえおなどの日本語部分が出てきこず途中で止まってしまいます・・・ 何が悪いか、改善方法教えてください!! 宜しくお願い致します!!!! import java.io.*; class Lesson1{ static char ch[]= {'0','1','2','3','4','5','6','7','8','9', 'A','B','C','D','E','F' }; //16種類 static int c1,c2; public static void main(String args[]) { System.out.println("Address 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF"); System.out.println("--------+--------------------------------------------------+------------------"); if(args.length !=1){ System.out.println("ファイル名を指定してください。"); //ファイルがついてない場合。 System.exit(1); } try { //入力ストリームを作成。 FileInputStream fis= new FileInputStream(args[0]); //ファイル読み取り //InputStreamReader in = new InputStreamReader(fis, "SJIS"); BufferedReader br= new BufferedReader(new FileReader(args[0])); // 読込みループ。 int d=0; int c; // 読み込んだものをsに入力。 String str; int n = 0, k = 16; //0~Fまでの数字 String s=""; while( (c = in.read()) != -1) { if( k > 15 ) { System.out.println(" "+s); //右のパーツ s = ""; System.out.printf("%08X: ",n); //Address k = 0; } d++; //バイト数表示 n++; k++; // 整数cを上位4ビットc1、下位4ビットc2に分解。 c1 =c/16; c2 =c%16; System.out.print(" " + ch[c1] + ch[c2]); //真ん中のパーツ。 //System.out.printf(" "+Integer.toHexString(c)); if( (c<= 0x00 || c<= 0x19) ) { //右のパーツ(表示できない場合 s = "."; } else{ //表示できる場合 s =s+(char)c; } } //String s1=String.valueOf(c); //int len =s.length(); System.out.println(""); System.out.println(""); System.out.println("ファイルサイズは"+d+"byteでした。"); // 入力ストリームを閉じる。 in.close(); } catch ( IOException e ) { System.out.println("ファイルの読み込みに失敗しました。"); //ファイル名が正しくない場合。 } } } 実行結果 Address 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF --------+--------------------------------------------------+------------------ 00000000: 31 32 33 34 35 36 37 38 39 30 61 62 63 64 65 66 1234567890abcdef 00000010: 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 ghijklmnopqrstuv 00000020: 77 78 79 7A 41 42 43 44 45 46 47 48 49 4A 4B 4C wxyzABCDEFGHIJKL 00000030: 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5AException in thread "main" j ava.lang.ArrayIndexOutOfBoundsException: 772 at Lesson1.main(Lesson1.java:55)

    • ベストアンサー
    • Java
  • javaコマンドが実行できません。

    C:\Work\workspace\createMaster\src\main\webapp\WEB-INF\classes>java C:\Work\workspace\createMaster\src\main\webapp\WEB-INF\classes\createMaster\util\M ain.class と実行すると Exception in thread "main" java.lang.NoClassDefFoundError: C:\Work\workspac e\createMaster\src\main\webapp\WEB-INF\classes\createMaster\util\Main/class とExceptionが発生します。 .class拡張子を除いて C:\Work\workspace\createMaster\src\main\webapp\WEB-INF\classes>java C:\Work\workspace\createMaster\src\main\webapp\WEB-INF\classes\createMaster\util\M ainと実行すると Exception in thread "main" java.lang.NoClassDefFoundError: C:\Work\workspac e\createMaster\src\main\webapp\WEB-INF\classes\createMaster\util\Main とExceptionが発生します。 classファイルはC:\Work\workspace\createMaster\src\main\webapp\WEB-INF\classes\ createMaster\util\Mainに存在します。 javaコマンド命令文の利用方法が分からなくて投稿します。 お答え宜しくお願いします。

  • コマンドライン引数

    『やさしいJava』で勉強してます。 import java.io.*; class Sam3 { public static void main(String args[]) { if(args.length != 1){ System.out.println("ファイル名が違うよ。"); System.exit(0); } try{ BufferedReader br= new BufferedReader(new FileReader(args[0])); String str; while((str = br.readLine()) != null){ System.out.println(str); } br.close(); }catch(IOException e){ System.out.println("エラー"); } } } で、コンパイルして、 Sam3 test2.txt と実行しても 「準備ができていません。読み取り中・・・」 としかでません。 なにか間違いがあるのでしょうか? お願いします。

    • ベストアンサー
    • Java
  • 足し算するプログラム

    タイトルの通りですが足し算をするプログラムを書いてみました。 第一引数を第二引数を足し算するのですが引数に「001」や「002」などの数字が入力された時に足し算した結果として素直に「00*」と足し算が出来ません。何かいい方法は無いでしょうか?教えてください。 import java.text.*; class Tashizan { public static void main(String[] args) { try { if(args.length == 0) { System.out.println("引数を整数値で入力して下さい。"); } else if(args.length == 1) { System.out.println("引数を整数値で2つ入力して下さい。"); } else if(args.length == 2) { int a = Integer.parseInt(args[0]); int b = Integer.parseInt(args[1]); if(a <= 999999999 && b <= 999999999) { int wa = a + b; System.out.println(a + "+" + b + "の和は" + wa + "です。"); } else { System.out.println("入力した桁数を9桁以下か確認してください。"); } } else { System.out.println("引数は整数値で2つ入力して下さい。"); } } catch(NumberFormatException nfe) { System.out.println("整数値を2つ入力して下さい。"); } catch(Exception e) { System.out.println(e + "エラー発生!処理を終了します。"); } } }

    • ベストアンサー
    • Java
  • コマンドプロンプトのエラーメッセージが理解できません

    今晩は、java. 初心者です宜しくお願いします。 Win MEです。 Java のコードをメモ帳で作成し、DOSで走らせたら以下の様なエラーメッセージが表示されました。 どのような意味でしょうか。 「Exception in thread "main" java.lang.NoClassDefFoundError: DisplayFloat」 「DisplayFloat」がプログラムの名前です。 これはよく分からないのですが、SDKをつんでいないということでしょうか。

  • Javaのプログラムについて教えて下さい

    //Sample.java class Sample void methodA(int temp) if(temp == 0) String str = new String("Exception"); Integer.parseInt(str); else if(temp == 1) int[] array = new int[temp]; else Exception exc = new Exception(); throw exc; //SampleMain.java class ExceptionMain public static void main(string[] args) Sample sam = new Sample(); Int temp = Integer.parseInt(args[0]); Sam.method(temp); } } このプログラムの場合、ExceptionMainに新たにコードを加えて、コマンドライン引数が0,1,その他の場合に例外メッセージを出力するプログラムを教えて下さい。

    • ベストアンサー
    • Java