こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

コマンドライン引数 java

学校で、2進数表記された文字列number1、number2…numberNを数値に変換し、合計を算出し、2進数表記の文字列に変換した結果を出力するプログラムを組む課題が出ました。

java Lesson06 number1 number2 … numberN
の形式で受け取ったコマンドライン引数を元に、処理を行います。
※number1からnumberNは、全て0か1のみで構成されている文字列

* 文字列の加算
* System.outまたはSystem.errのprint系メソッドで、Stringの値を受け取るもの以外
* Integerなどのラッパークラス
* DecimalFormatなどの書式変換クラス
上記の機能は使ってはいけません。

----
class Lesson{
 public static void main(String args[]){

  int sum;

  for(int i = 1; i < args.length; i ++) {

   int len = strlen(args[i]);//※

   for(int j = 0; j < len; j ++) {

    if(args[i][len - j - 1] == "1") {//※

     sum = pow(2, j) + sum;//※
    }
   }
  }
 }
}
----
とりあえず、与えられた二進数を計算する部分まで作ってみたのですが、※の部分でエラーが出てしまいます。
コマンドライン引数もよく分からなくて困っているので、教えていただければ助かります。

以上よろしくお願いいたします。

投稿日時 - 2010-01-11 16:46:28

QNo.5585243

すぐに回答ほしいです

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

> int len = args[i].length(); でいいのでしょうか?
> args[i].charAt(len - j - 1) では駄目なのでしょうか?

いいのか駄目なのか、自分で実際にコンパイルして動かしてみれば分かると思います。

> みっつ目の※
> forを使うのでしょうか?

お好きな方法でどうぞ。

2進数文字列→int型整数を行うメソッドを書いてみました。rの値がどう変化するかを確認してみてください。
public static int binaryStringToInt(String s) {
int r=0;
int len=s.length();
for (int i=0; i<len; i++) {
char c=s.charAt(i);
if (c =='0') r=r*2;
else if (c == '1') r=r*2+1;
else {
System.out.println("不正な文字 " + c);
break;
}
}
return r;
}

投稿日時 - 2010-01-13 23:23:48

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

参考までに、使ってはいけないことになっているIntegerクラスを使うとこれだけで書けます。
public static void main(String[] args) {
int sum=0;
for (int i=0; i<args.length; i++)
try { sum+=Integer.parseInt(args[i], 2); }
catch (NumberFormatException e) { }
System.out.println(Integer.toBinaryString(sum));
}

投稿日時 - 2010-01-11 23:17:49

ANo.1

ひとつ目の※:
strlen()はC言語の標準関数ですが、Javaにはありません。文字列の長さはStringクラスのlength()メソッドで求めます。

ふたつ目の※:
Javaの文字列は表向きは配列ではないので、args[i][n]のようにしてargs[i]のn番目の文字を取り出すことはできません。StringクラスのcharAt()メソッドを調べてみてください。
もう一つ、"1"と書くと一つの文字を表すのではなく長さ1の文字列になってしまいます。文字列ではなく文字として比較したほうがいいでしょう。

みっつ目の※:
JavaではMathクラスにpow()があります。
ただし、この問題だったらpow()を使う必要はないはずです(少々発想の転換が要ります)。

投稿日時 - 2010-01-11 17:55:25

補足

回答ありがとうございます。
さらに質問を重ねてしまいますが、

ひとつ目の※
int len = args[i].length(); でいいのでしょうか?

ふたつ目の※
記述の仕方がいまいちよく分かりません。
args[i].charAt(len - j - 1) では駄目なのでしょうか?

みっつ目の※
forを使うのでしょうか?

重ね重ね申し訳ありません。

投稿日時 - 2010-01-12 22:46:38

あなたにオススメの質問