数値を2進数に変換するコードを書き込もうとしていますが、これが私が書いたものです。 Eclipseでいくつかのエラーが発生しますが、私にはわかりません。それのどこが悪いんだい?他に何か提案はありますか?それを修正するためのコメントを学び、聞きたいです。ありがとうございました。
_public class NumberConverte {
public static void main(String[] args) {
int i = Integer.parseInt(args);
public static void Binary(int int1){
System.out.println(int1 + "in binary is");
do {
System.out.println(i mod 2);
} while (int1>0);
}
}
}
_
エラーメッセージ:
Integer
のメソッドparseInt(String)
は、引数には適用できません(_String[]
_)(
_"の構文エラー、;期待される)
_"の構文エラー、;期待されるvoid
は変数Binary
の無効な型ですInteger.toBinaryString(int) トリックを実行する必要があります!
ちなみに、構文を修正してください。Eclipseを使用している場合、彼は多くのエラーについて不平を言っていると思います。
作業コード:
public class NumberConverter {
public static void main(String[] args) {
int i = Integer.parseInt(args[0]);
toBinary(i);
}
public static void toBinary(int int1){
System.out.println(int1 + " in binary is");
System.out.println(Integer.toBinaryString(int1));
}
}
toBinaryString()
を使いたくないかもしれません。あなたは今あなたが学んでいると言ったので、あなたはこのようにあなた自身でそれをすることができます:
/*
F:\>Java A 123
123
1 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0
*/
public class A {
public static void main(String[] args) {
int a = Integer.parseInt(args[0]);
System.out.println(a);
int bit=1;
for(int i=0; i<32; i++) {
System.out.print(" "+(((a&bit)==0)?0:1));
bit*=2;
}
}
}
プログラムを最初にIDEでコンパイルすることをお勧めします。 IDEを使用していない場合は、無料のものを入手することをお勧めします。これにより、エラーの場所が示され、コンパイルされるまでエラーを修正してから、改善方法を心配することをお勧めします。
手始めに、メソッド内でメソッドを宣言しました。 mainメソッドは、クラスを実行するときに最初に実行されるメソッドです。 ParseIntは文字列を受け取りますが、argsは文字列の Array であるため、配列の最初の(0ベースの)インデックスを取得する必要があります。
mod
は有効な演算子ではありません。必要な構文は、%
でした。
println
ではなく、System.out.print
を使用して同じ行に印刷できます。
これらの修正を試して、どのように進むかを教えてください。
public class NumberConverter {
public static void main(String[] args) {
int i = Integer.parseInt(args[0]);
Binary(i);
}
public static void Binary(int int1){
System.out.println(int1 + " in binary is ");
do {
System.out.print(int1 % 2);
int1 /= 2;
} while (int1 > 0);
}
}
あなたが取り組む必要がある2つの主要な問題があります:
第一に、人々はすでにそのメソッドの書き方を指摘しています。 Javaの通常のメソッド名は、通常、最初の文字が小文字で綴られていることに注意してください。
2つ目は、int1
の値を変更しないため、入力のLSBをタイトループで出力することになります。次のようなものを試してください:
do {
System.out.println(int1 & 1);
int1 = int1 >> 1;
} while (int1 > 0);
説明:
次に、数字を「間違った順序」で印刷していることに気付くでしょう。MSBからLSBに数字を印刷する方が自然です。逆に出力しています。これを修正するには、MSBからLSBまでの各ビットをチェックするfor
ループを使用する方がよいでしょう。
Forループのアイデアは、intの32ビットのそれぞれを、MSBから始めて、左から右に出力されるようにすることです。このようなもの
for (i=31; i>=0; i--) {
if (int1 & (1<<i)) {
// i-th bit is set
System.out.print("1");
} else {
// i-th bit is clear
System.out.print("0");
}
}
1<<i
は左シフトです。右シフトに似ていますが、反対方向です。 (私はこれをまったくテストしていません。)
それが機能するようになったら、さらなる演習として、同じことを試してみることをお勧めしますが、先行ゼロは出力しないでください。
さて、最初に私はあなたがエラーメッセージについて知っていると思います。次に、コードが暗い(構文とインデントが正しくない)。以下のコードをお勧めします、
import Java.util.Scanner;
public class IntToBinary
{
public static void main(String[] args)
{
int number = 0;
Scanner sc = new Scanner(System.in);
System.out.println("Please enter an integer : ");
number = sc.nextInt();
convertToBinary(number);
sc.close();
}
public static void convertToBinary(int num)
{
String str = "";
for(int a = 0; a < 8; a++)
{
if(num % 2 == 1)
{
str = "1" + str;
}
if(num % 2 == 0)
{
str = "0" + str;
}
num = num / 2;
}
System.out.println("The binary conversion is : " + str);
}
}
それが役に立てば幸い!!
StringBuffer sb = new StringBuffer("");
void breakNumber(int num){
if(num == 0 || num == 1){
System.out.println(num);
}else{
int modr = num % 2;
sb.append(modr);
int divr = num / 2;
if(divr > 1){
breakNumber(divr);
}else{
sb.append(modr);
StringBuffer sbr =sb.reverse();
System.out.println(sbr.toString());
}
}
}
これは私がAndroid用に作成した小さなビットテストコードです。
int myres = bitTest(7、128);
public int bitTest(int bit,int value)
{
int res = 0;
int i = 0;
while (i <= bit) {
res = (value & 1);
value = value >> 1;
i++;
}
return res;
}
よろしくミカエル・アンダーソン