【问题标题】:Convert binary to decimal with an array使用数组将二进制转换为十进制
【发布时间】:2017-06-30 05:37:07
【问题描述】:

我正在尝试将二进制字符串转换为十进制。如果输入-1,它将终止。我坚持使用数组。建议使用: public static int binaryToDecimal (String binaryString) 。但我不知道该怎么做。这就是我所拥有的:

import java.util.Scanner;

public class BinaryConversion {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        String inString;
        int decimal;

        System.out.println("Enter a binary number: ");
        inString = input.nextLine();

        while (inString != "-1") {
            int i;
            int binaryLength;

            binaryLength = inString.length();

            for (i = 0, decimal = 0; i < binaryLength; i++) {
                decimal = decimal * 2 + (inString[i] - 0);
                System.out.print(decimal);

            } 
            System.out.println("Enter a binary number: ");
            inString = input.nextLine();
        }
        System.out.println("All set !");
    }
}

它说数组存在编译问题。谢谢!

【问题讨论】:

    标签: java arrays binary


    【解决方案1】:

    inString 是一个字符串,而不是一个数组。所以,你不能使用 inString[i]。要获取字符串中给定位置的字符,请使用 inString.charAt(i),它会返回一个字符。

    然后,您还必须将该 char 转换为 int。 您可以使用 Character.getNumericValue(char) 来做到这一点。

    总之,而不是

    inString[i]
    

    你需要使用

    Character.getNumericValue(inString.charAt(i))
    

    【讨论】:

      【解决方案2】:

      试试这个:

              public static void main(String[] args) {
              Scanner input = new Scanner(System.in);
      
              String inString;
              int decimal;
      
              System.out.println("Enter a binary number: ");
              inString = input.nextLine();
              //Character.getNumericValue(inString.charAt(i))
      
              while (inString != "-1") {
                  int i;
                  int binaryLength;
      
                  binaryLength = inString.length();
      
                  for (i = 0, decimal = 0; i < binaryLength; i++)
                  {
                      decimal = decimal * 2 + (Character.getNumericValue(inString.charAt(i)) - 0);
                      System.out.print(decimal);
      
                  } 
                  System.out.println("Enter a binary number: ");
                  inString = input.nextLine();
              }
              System.out.println("All set !");
          }
      

      }

      按照建议,您必须使用Character.getNumericValue

      【讨论】:

        【解决方案3】:

        你可以使用Integer.parseInt()来简化代码:

        public static void main(String[] args) {
            final Scanner input = new Scanner(System.in);
        
            String inString;
        
            while (true) {
                System.out.println("Enter a binary number: ");
                inString = input.nextLine();
        
                if (inString.equals("-1"))
                    break;
        
                System.out.println(Integer.parseInt(inString, 2));
            }
            System.out.println("All set !");
        }
        

        【讨论】:

          【解决方案4】:

          您几乎没有逻辑错误和语法错误。

          这是工作代码:

          public static void main(String[] args) {
              Scanner input = new Scanner(System.in);
          
              String inString;
              int decimal;
          
              System.out.println("Enter a binary number: ");
              inString = input.nextLine();
          
              while (!"-1".equals(inString)) {
                  int i;
                  int binaryLength;
          
                  binaryLength = inString.length();
          
                  for (i = binaryLength-1, decimal = 0; i >= 0; i--) {
                      if (inString.charAt(i) == '1') {
                          decimal += Math.pow(2, binaryLength-i-1);
                      }
                  }
                  System.out.println(decimal);
          
                  System.out.println("Enter a binary number: ");
                  inString = input.nextLine();
              }
              System.out.println("All set !");
          }
          

          注意,String 不能用== 进行比较,你必须使用equalscompareTo 方法。

          【讨论】:

            【解决方案5】:
            byte[] binary = {1,1,0,1};
            
            int decimal = 0;
            for(int i=binary.length-1, j=0; i>=0; i--, j++){
                decimal  += binary[i]*Math.pow(2, j);
            }
            

            【讨论】:

            • OP 将以String 开头,而不是byte[]
            • 感谢您提供此代码 sn-p,它可能会提供一些即时帮助。一个正确的解释would greatly improve 其教育价值通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有类似但不相同的问题的读者更有用。请edit您的答案添加解释,并说明适用的限制和假设。
            猜你喜欢
            • 2016-12-25
            • 2010-12-08
            • 2012-06-26
            • 2019-12-14
            • 2017-01-31
            • 2011-01-08
            • 1970-01-01
            • 2018-04-21
            • 2021-08-10
            相关资源
            最近更新 更多