eclipce上でエラーが出てしまいます。
きっとコンパイルエラーが出ているのですね。
Java
1String valStr;
2int valInt;
3double valDouble;
ここはmain
メソッドのローカル変数だとすると初期化が必要です。
Java
1} else if ( args[i] instanceof Integer ) {
Java
1} else if ( args[i] instanceof Float ) {
もエラーですね。args[i]
は String
型なので、互換性のない型に対して instanceof
演算子を使用しているので文法的に誤りです。
ついでに言うと Float
と Double
は違いますので、この処理の中ではどちらかに統一して使いましょう。
次いで・・・
がエラーになっていると思います。
前者は型が合わない、後者は変数が存在しない、という状態。
まず後者は、valDouble
ですね。
それを直すと前者と同様に型が合わないというエラーになるでしょう。
args
は、おそらく main(String[] args)
の args
ですよね。
そうだとすると、args[i]
は String
型です。
一方、valInt
、valDouble
はそれぞれ、int
型、double
型ですので、 String
型の args[i]
を代入しようとしても型が一致しないというエラーになります。
エラーはそんなところかと。
また、instanceof
演算子は、オブジェクトがどの型であるかを判定するためのものですから、instanceof
の使用している行でコンパイルエラーにならなかったとしても、書かれている if ~ else if
文の各条件において、常に最初の条件で true
になってしまって他の else if
や、最後の else
の処理が実行されることはないでしょう。
どうするかというのは他の方の回答にある通り、args[i]
の文字列が整数とみなせるものか、浮動小数点数と見なせるものかを判定して、型を変換して値を代入する必要があります。どちらでもない場合は常に String
型 です。
Java
1String valStr = "";
2int valInt = 0;
3double valDouble = 0.0;
4
5if ( 何らかの方法で args[i] の文字列が整数と言えるかを判定 ) {
6 valInt = 何らかの方法で整数に変換(args[i]);
7} else if ( 何らかの方法で args[i] の文字列が浮動小数点数と言えるかを判定 ) {
8 valDouble = 何らかの方法で浮動小数点数に変換(args[i]);
9} else {
10 valStr = args[i];
11}
12
もし各変数の未設定状態を把握したいのであれば、int
と double
をそれぞれ Integer
、 Double
に変えて、変数の初期化は valStr
も含めて null
を設定しましょう。
そうすることで、あとで null
の変数はコマンド行引数からの値設定がされていない状態だということが判定できます。
Java
1String valStr = null;
2Integer valInt = null;
3Double valDouble = null;
Java は型にうるさいのでスクリプト系の動的型付けとは趣が異なります。