Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
二进制到十进制转换Java代码错误_Java - Fatal编程技术网

二进制到十进制转换Java代码错误

二进制到十进制转换Java代码错误,java,Java,所以我在做一个项目,我必须做从二进制数到小数的转换,等等。 这是我到目前为止的代码,有一个bug。在像1101这样的二进制数中,假设出来的十进制数是13,但从代码中出来的数字是11。这个错误发生在所有以一堆1开头的二进制数上,就像一个0 import java.util.*; // imports everything in java.util public class newCalculator{ * Conversion asks the user for a binary num

所以我在做一个项目,我必须做从二进制数到小数的转换,等等。 这是我到目前为止的代码,有一个bug。在像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
   * 
   */
  }

}
import java.util.*;//导入java.util中的所有内容
公共类新计算器{
*转换要求用户输入二进制数。它将输入转换为十进制数
*使用数组,然后在屏幕上显示答案。
*/
publicstaticvoidmain(String[]args){//创建main方法
binaryToDecimal();//调用用户定义的方法binaryToDecimal
}
公共静态void binaryToDecimal(){
Scanner scan=new Scanner(System.in);//创建一个新的扫描仪
System.out.println(“输入二进制数”);//要求用户输入他们的数字
String binary=scan.next();//创建一个存储输入值的新字符串
char[]charArray=binary.toCharArray();//创建一个新数组并在输入中实现
double-answer=0;//创建一个名为answer的新的double,将其设置为零
for(双索引=0;索引*1101 13 11计算预期结果时,就像从右向左读取二进制字符串一样;但是,代码从左向右读取二进制字符串

更改此项:

for (double index = 0; index < charArray.length; index++){
您还应该更改为使用整数作为索引,如下所示:

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

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

你打给Math.pow的电话应该是

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

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

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

您的算法是正确的,除了在
Math.pow
中使用
Math.pow(2.0,charArray.length-i-1)
而不是
index
之外,下面是正确的实现(实际上只是小的增量更改)

import java.util.Scanner;
公共类NewCalc{
公共静态void main(字符串[]args){
binaryToDecimal();
}
公共静态void binaryToDecimal(){
扫描仪扫描=新扫描仪(System.in);
System.out.println(“输入二进制数”);
String binary=scan.next();
char[]charArray=binary.toCharArray();
双答案=0;
for(int i=0;i
包PDA项目;
导入java.util.Scanner;
公共类NewCalc{
公共静态void main(字符串[]args){
binaryToDecimal();
} 
//转换为十进制(以10为基数)
公共静态void binaryToDecimal(){
扫描仪扫描=新扫描仪(System.in);
System.out.println(“输入二进制数”);
String binary=scan.next();
int-answer=0;
//从左到右处理
对于(int i=0;i
不要使用
Math.pow(…)
对于任何一个问题。在纸上写下你如何解决这个问题以找到你的算法,但同样,不要在只需要简单代数的东西上调用高性能和不必要的浮点方法。请注意,你过度使用注释会让人分心。这里已经给出了答案:欢迎使用SO。最好是answe回答问题者的代码,而不是替换它。如果提问者提供的代码无法出售,解释是有帮助的。
answer = answer + Math.pow(2.0, (charArray.length - index - 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);
    }
}
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);
    }
}
 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;
    }

}