Преобразование десятичной в двоичную в Java - PullRequest
8 голосов
/ 05 марта 2011

Я пытаюсь написать код, который преобразует число в двоичное, и это то, что я написал.Это дает мне пару ошибок в 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. Метод parseInt(String) в типе Integer не применим для аргументов (String[])
  2. Несколько маркеров в этой строке
    • Синтаксическая ошибка на токене "(",;ожидается
    • Синтаксическая ошибка на токене ")",;ожидается
    • void - недопустимый тип для переменной Binary
  3. Несколько маркеров в этой строке
    • Синтаксическая ошибка на токене "mod"недопустимый AssignmentOperator
    • Синтаксическая ошибка на токене "mod", недопустимый AssignmentOperator.

Ответы [ 9 ]

16 голосов
/ 05 марта 2011

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));
   }
}
7 голосов
/ 05 марта 2011

Может быть, вы не хотите использовать 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;
        }
    }
}
1 голос
/ 05 марта 2011

Есть две основные проблемы, на которые нужно обратить внимание:

  • Не объявляйте метод внутри другого метода.
  • Ваш цикл никогда не закончится.

Во-первых, люди уже указали, как написать этот метод.Обратите внимание, что обычные имена методов в java обычно пишутся с маленькой буквы в нижнем регистре.

Во-вторых, вы никогда не измените значение int1, поэтому вы в конечном итоге напечатаете младший бит вводав тесной петле.Попробуйте что-то вроде:

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

Объяснение:

  • int1 & 1: это двоичный файл и.Он «выбирает» наименьший бит (LSB), то есть (a & 1) равен единице для нечетных чисел, ноль для четных чисел.
  • int1 >> 1: это правильный сдвиг.Он перемещает все биты вниз на один слот (>> 3 - на 3 слота).LSB (бит 0) отбрасывается, бит 1 становится LSB, бит 2 становится битом и т. Д. (A >> 0) вообще ничего не делает, оставляет нетронутым.

Тогда вы заметите, что вы печатаете цифры в «неправильном порядке» - более естественно, чтобы они печатались из MSB в LSB.Вы выводите в обратном порядке.Чтобы исправить это, вам, вероятно, будет лучше с циклом for, проверяющим каждый бит от MSB до LSB.

Идея для цикла for состоит в том, чтобы взглянуть на каждый из 32 бит вint, начиная с 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 голос
/ 05 марта 2011

Для начала вы объявили метод внутри метода. Основной метод - это метод, который запускается первым при запуске вашего класса. ParseInt принимает строку, тогда как args является Array строк, поэтому нам нужно взять первый (основанный на 0) индекс массива.

mod не является допустимым оператором, синтаксис, который вы хотели, был %

Вы можете использовать System.out.print для печати на той же строке, а не println

Попробуйте эти исправления и дайте мне знать, как вы ладите:

 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 голос
/ 05 марта 2011

Я предлагаю вам сначала скомпилировать программу в вашей IDE. Если вы не используете IDE, я предлагаю вам бесплатно. Это покажет вам, где ваши ошибки, и я предлагаю вам исправить ошибки, пока они не скомпилируются, прежде чем беспокоиться о том, как их исправить.

0 голосов
/ 17 ноября 2017

Ну, во-первых, я предполагаю, что вы знаете о сообщениях об ошибках. Во-вторых, ваш код мрачен (синтаксис и отступ не верны). Я хотел бы предложить код ниже,

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 голосов
/ 17 декабря 2016
package gg;

import java.util.*;

public class Gg {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        boolean flag = true;
        while (flag) {
            menu();
            int n = in.nextInt();
            switch (n) {
            case 1:
                System.out.println("enter an integer decimal number : ");
                int d = in.nextInt();
                System.out.print("the answer is ");
                DTB(d);
                System.out.println();
                break;
            case 2:
                System.out.println("enter a binary number : ");
                int b = in.nextInt();
                System.out.print("the answer is " + BTD(b));
                System.out.println();
                break;
            case 3:
                flag = false;
                break;
            }
        }
    }

    public static void menu() {
        System.out.println("1.convert decimal to binary : ");
        System.out.println("2.convert binary to decimal : ");
        System.out.println("3.exit");
    }

    public static void DTB(int x) {
        int n = 0;
        int y = x;
        while (y > 0) {
            y /= 2;
            n++;
        }
        int s[] = new int[n];
        int i = 0;
        while (x > 0) {
            s[i] = x % 2;
            x /= 2;
            i++;
        }
        for (int j = s.length - 1; j >= 0; j--) {
            System.out.print(s[j]);
        }
    }

    public static int BTD(int x) {
        int y = 2;
        int sum = 0;
        double k = 1;
        int c = 0;
        while (x > 0) {
            double z = x % 10;
            x /= 10;
            k = Math.pow(y, c);
            c++;
            k *= z;
            sum += k;
        }
        return sum;
    }

}
0 голосов
/ 07 сентября 2014
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 голосов
/ 20 июля 2011

Вот небольшой тестовый код, который я сделал для 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;
 }

С наилучшими пожеланиями Микаэль Андерссон

...