学校で、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;//※
}
}
}
}
}
----
とりあえず、与えられた二進数を計算する部分まで作ってみたのですが、※の部分でエラーが出てしまいます。
コマンドライン引数もよく分からなくて困っているので、教えていただければ助かります。
以上よろしくお願いいたします。
No.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;
}
No.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));
}
No.1
- 回答日時:
ひとつ目の※:
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を使うのでしょうか?
重ね重ね申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Java 配列<選挙> 4 2023/07/31 15:07
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JAVAでCの関数ポインタのような...
-
【C#】フォームをなめらかに移動
-
Javaで電卓を作りたい
-
DataSet(DataTable)の使い方
-
三目並べ(Tick-Tack-Toe)をJav...
-
式の型は配列型で int に解決済...
-
java spring でエラーが出て困...
-
byte[]→int
-
コマンドライン引数 java
-
JSPのアルゴリズムで質問
-
javaでcsvファイル読込時の改行...
-
Javaのファイル名チェックについて
-
前日日付の取得
-
6桁の数字を重複なしでランダム...
-
C#でバブルソート
-
Stringの100と100.0を同一とみ...
-
SwingでJtableのヘッダ行が表示...
-
「配列定数は、イニシャライザ...
-
(Swing)JTextFieldを半角のみ入...
-
ダブルクォーテーションのrepla...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「配列定数は、イニシャライザ...
-
Javaで電卓を作りたい
-
式の型は配列型で int に解決済...
-
javaでカレンダー作成
-
JAVA エラー 式の開始が不正で...
-
JAVAでCの関数ポインタのような...
-
java spring でエラーが出て困...
-
6桁の数字を重複なしでランダム...
-
c# デリゲート関連の命名について
-
C++からC#のdllを参照する際、...
-
メインが含まれていません
-
(Swing)JTextFieldを半角のみ入...
-
DataSet(DataTable)の使い方
-
三目並べ(Tick-Tack-Toe)をJav...
-
JUnit4のアノテーションについて
-
初心者ですが、今javaで簡単な...
-
classを使って座標軸を求めるコ...
-
javaでcsvファイル読込時の改行...
-
C#で実行時にメソッドの返り値...
-
Java 初心者 int型の取り扱い方
おすすめ情報