0

所以我正在做一个项目,我必须将二进制数转换为小数等。这是我到目前为止的代码,并且有一个错误。在像 1101 这样的二进制数中,假设输出的十进制数是 13,但从代码中输出的数字是 11。这个错误发生在所有以一串 1 开头并且像单个 0 的二进制数上。

import java.util.*; // imports everything in java.util

public class newCalculator{

   * Conversion asks the user for a binary number.  It converts the input to a decimal number
   * using arrays and then displays the answer to the screen.
  */

  public static void main (String[]args){ // creates the main method
  binaryToDecimal(); //calls the user defined method binaryToDecimal
  }

  public static void binaryToDecimal() {
    Scanner scan = new Scanner(System.in); // Creates a new Scanner
    System.out.println("Input a Binary Number"); // Asks the user to input their number
    String binary = scan.next(); // Creates a new String that stores the value of the input
    char[] charArray = binary.toCharArray(); //Create a new Array and implements in the input
    double answer = 0;  // Creates a new double called answer setting it to zero
    for (double index = 0; index < charArray.length; index++){//For loop
      if (charArray[(int)index] == '1') {//If statement that allows the binary input to work
        answer = answer + Math.pow(2.0, index);//Sets the answer with the math class power of 2
      }
    }
    System.out.println(answer);//Prints out the final conversion result
     /* Test Cases   Expected Result   Output
   * 101                 5             5
   * 11                  3             3
   * 1                   1             1
   * 1101                13            11<--
   * 111                 7             7
   * 1000001             65            65
   * 1111                15            15
   * 1001                9             9
   * 11101               29            23<--
   * 10101               21            21
   * 
   */
  }

}
4

5 回答 5

1

正在计算您的预期结果,就好像从右到左读取二进制字符串一样;但是,您的代码正在从左到右读取二进制字符串。

改变这个:

for (double index = 0; index < charArray.length; index++){

对此:

for (double index = charArray.length - 1; index >= 0; index--) {

您还应该更改为使用整数作为索引,如下所示:

for (int index = charArray.length - 1; index >= 0; index--) {
于 2013-02-13T23:31:09.677 回答
0
package pdaproject;
import java.util.Scanner;
public class NewCalc {

    public static void main(String[] args) {
        binaryToDecimal();
    } 
    // convert to decimal (base 10)
    public static void binaryToDecimal() {
        Scanner scan = new Scanner(System.in);
        System.out.println("Input a Binary Number");
        String binary = scan.next();
        int answer = 0;
        // process left to right
        for (int i = 0; i < binary.length(); i++) {
            answer = 2 * answer + (binary.charAt(i) == '1' ? 1 : 0);
        }
        System.out.println(answer);
    }
}
于 2013-06-29T02:44:55.067 回答
0

你正在以错误的顺序浏览你的位。您的第一个索引指的是最高有效位,而不是最低有效位。

您对 Math.pow 的调用应该是

answer = answer + Math.pow(2.0, (charArray.length - index - 1));

正如 Tom Leese 已经指出的那样,请使用整数作为循环索引。

于 2013-02-13T23:31:31.857 回答
0

对称就是答案。如果您查看所有测试输入,它们都是对称的,除了 1101

您的算法是正确的,除了您需要使用 的不是indexin ,而是正确的实现(实际上只有很小的增量更改)Math.powMath.pow(2.0, charArray.length - i - 1)

import java.util.Scanner;

public class NewCalc {

    public static void main(String[] args) {
        binaryToDecimal();
    }

    public static void binaryToDecimal() {
        Scanner scan = new Scanner(System.in);
        System.out.println("Input a Binary Number");
        String binary = scan.next();
        char[] charArray = binary.toCharArray();
        double answer = 0;
        for (int i = 0; i < charArray.length; i++) {
            answer = charArray[i] == '1'
                    ? answer + Math.pow(2.0, charArray.length - i - 1)
                    : answer;
        }
        System.out.println(answer);
    }
}
于 2013-02-13T23:43:46.350 回答
0
 public class BinaryToDecimal {
    static int testcase1=1001;
    public static void main(String[] args) {
        BinaryToDecimal test = new BinaryToDecimal();
        int result = test.convertBinaryToDecimal(testcase1);
        System.out.println(result);
    }

    //write your code here
    public int convertBinaryToDecimal(int binary)
    {
        int deci = 0;
        int p=1;
        int rem = 0;
        while(binary>0)
        {
            rem = binary%10;
            deci = deci+(rem*p);
            p = p*2;
            binary = binary/10;
        }

        return deci;
    }

}
于 2013-11-08T19:20:43.410 回答