電子書籍の厳選無料作品が豊富!

学校で、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;//※
    }
   }
  }
 }
}
----
とりあえず、与えられた二進数を計算する部分まで作ってみたのですが、※の部分でエラーが出てしまいます。
コマンドライン引数もよく分からなくて困っているので、教えていただければ助かります。

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

A 回答 (3件)

> 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;
}
    • good
    • 0

参考までに、使ってはいけないことになっている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));
}
    • good
    • 0

ひとつ目の※:


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

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

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

この回答への補足

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

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

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

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

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

補足日時:2010/01/12 22:46
    • good
    • 0

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