dポイントプレゼントキャンペーン実施中!

コマンドライン引数で*で掛け算するプログラムを作成しています。
「"*"」の入力なしに
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);
}
}
}

A 回答 (16件中11~16件)

こんばんは~!



単純にこんな感じではダメなんですかね。
意図が違ってたらすいません。

public class Mainkeisan {

public static void main(String[] args)
{
try {

System.out.println(Integer.parseInt(args[0]) * Integer.parseInt(args[1]));

} catch(Exception e) {
System.out.println("数字を入力してください。");
System.out.println("入力例:java Mainkeisan 1 1");
}
}
}

この回答への補足

isi0611さん。初めまして!よろしくお願いします。
ソースありがとうございます。
伺いたいことがあるのですが実行すると次の
エラーがでてしまいます。どうやってもとれません。
ディレクトリ構成はC:\myweb\goo にMainkeisan.java
を入れました。gooはパッケージです。
もしわかりましたら教えていただけませんか。
ーーーーーーーーーーーーーーーーーーーーimport goo.*;
package goo;
public class Mainkeisan {

public static void main(String[] args)
{
try {

System.out.println(Integer.parseInt(args[0]) * Integer.parseInt(args[1]));

} catch(Exception e) {
System.out.println("数字を入力してください。");
System.out.println("入力例:java Mainkeisan 1 1");
}
}

}
 エラー
c:\myweb>javac goo\Mainkeisan.java
goo\Mainkeisan.java:2: 'class' または 'interface' がありません。
package goo;
^

補足日時:2006/10/06 15:21
    • good
    • 0

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

この回答への補足

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

補足日時:2006/10/06 16:30
    • good
    • 0

#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);

この回答への補足

お返事ありがとうございます。
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);

}
}
}

補足日時:2006/10/05 20:20
    • good
    • 0

補足です。


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

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

お礼日時:2006/10/05 20:32

まず、パッケージ宣言が"myweb.keisanmain"になっているので、


コマンドラインから実行する際は、カレントディレクトリの下に
\myweb\keisanmain
というディレクトリがくるところに移動する必要があるのでないかな?と思います。
この場合は、C:ドライブの直下ですね。
なので、
"CD \"
と入力して、プロンプトが
C:\>
と表示する状態にして、そこで実行してみてください。

また、今回の実行コマンドが引数との間にスペースがないため、
Mainkeisan1
と言うクラス指定になっています。
引数とクラス名のスペースを忘れないようにしましょう。

この回答への補足

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

補足日時:2006/10/05 20:25
    • good
    • 0

NoClassDefFoundError


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

この回答への補足

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);
}
}
}

と配列のところだけ変更しました。
是非お手数をおかけしますがわかる方教えて下さい。

補足日時:2006/10/05 10:40
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!