web-dev-qa-db-ja.com

Javaで10進数を2進数に変換する

数値を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);
    }
  }
}
_

エラーメッセージ:

  1. タイプIntegerのメソッドparseInt(String)は、引数には適用できません(_String[]_)
  2. この行に複数のマーカー
    • トークン "_(_"の構文エラー、;期待される
    • トークン "_)_"の構文エラー、;期待される
    • voidは変数Binaryの無効な型です
  3. この行に複数のマーカー
    • トークン「mod」の構文エラー、無効なAssignmentOperator
    • トークン「mod」の構文エラー、無効なAssignmentOperator。
9
Unknown user

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));
   }
}
17
krtek

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;
        }
    }
}
7
Bernd Elkemann

プログラムを最初にIDEでコンパイルすることをお勧めします。 IDEを使用していない場合は、無料のものを入手することをお勧めします。これにより、エラーの場所が示され、コンパイルされるまでエラーを修正してから、改善方法を心配することをお勧めします。

1
Peter Lawrey

手始めに、メソッド内でメソッドを宣言しました。 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);


 }
}
1
TimCodes.NET

あなたが取り組む必要がある2つの主要な問題があります:

  • 別のメソッド内でメソッドを宣言しないでください。
  • あなたのループは決して終わりません。

第一に、人々はすでにそのメソッドの書き方を指摘しています。 Javaの通常のメソッド名は、通常、最初の文字が小文字で綴られていることに注意してください。

2つ目は、int1の値を変更しないため、入力のLSBをタイトループで出力することになります。次のようなものを試してください:

do {
  System.out.println(int1 & 1);
  int1 = int1 >> 1;
} while (int1 > 0);

説明:

  • int1&1:それはバイナリです。最小ビット(LSB)を「選択」します。つまり、(a&1)は奇数の場合は1、偶数の場合は0です。
  • int1 >> 1:それは右シフトです。すべてのビットを1スロット下に移動します(>> 3は3スロット下に移動します)。 LSB(ビット0)は破棄され、ビット1はLSBになり、ビット2はビット1になります...(a >> 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は左シフトです。右シフトに似ていますが、反対方向です。 (私はこれをまったくテストしていません。)

それが機能するようになったら、さらなる演習として、同じことを試してみることをお勧めしますが、先行ゼロは出力しないでください。

1
Mat

さて、最初に私はあなたがエラーメッセージについて知っていると思います。次に、コードが暗い(構文とインデントが正しくない)。以下のコードをお勧めします、

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);
   }
}

それが役に立てば幸い!!

0
Shiva
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());    
        }
    }
 }
0
user2991730

これは私が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;
 }

よろしくミカエル・アンダーソン

0