2014-03-26 195 views
0

我试图将二进制字符串转换为小数。如果输入-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 !"); 
    } 
} 

它说,有一个数组编译问题。谢谢!

回答

1

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

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

因此,在总结,而不是

inString[i] 

你需要使用

Character.getNumericValue(inString.charAt(i)) 
0

你有一些逻辑和一些语法错误。

这是工作代码:

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

注意,比较字符串不能==做,你必须使用equalscompareTo方法。

1

试试这个:

 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

1

您可以通过使用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 !"); 
} 
0
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); 
} 
+0

OP将是st用'String'创作,而不是'byte []'。 – avojak

+0

感谢您使用此代码段,它可能会提供一些即时帮助。通过展示*为什么*这是一个很好的解决方案,对未来的读者会有更好的解决方案,这将为它的教育价值提供一个合适的解释[//大大提高](// meta.stackexchange.com/q/114762)但不完全相同的问题。请编辑您的答案以添加解释,并指出适用的限制和假设。 –

相关问题