转换为十进制但不使用integer.parseInt()方法

时间:2015-05-10 10:25:56

标签: java

所以这是我的第一个编程课程,我有一个将用户输入的二进制数转换为小数的赋值。我的二进制数应该存储在一个字符串中。 要检查我的所有数字是1还是0,我需要使用一种方法来确保它有效,如果数字正确则返回true,否则返回false。 所以我做了一个搜索,看到每个人都使用integer.parseInt(String , int radix)方法将二进制字符串转换为int,完全正常,但是,唯一的问题是我们没有和我的教授这样做,所以我&# 39;我不确定它是否可以,也许他想要另一种方式来转换它?

所以我的问题是:如何以不使用此方法的其他方式编写此代码?

这是我的代码:

import java.util.*;
import java.lang.*;
public class Assignment2
{static Scanner stdIn= new Scanner (System.in);
public static void main(String[] args) {

  {String st;
     int converttodecimal;

     System.out.println("enter a binary number to convert to decimal: ");
     st = stdIn.next();

     while(!validbinary(st)) { 

        System.out.println("invalid value, enter a binary number which consists of 1s and 0s only: "); 
        st = stdIn.next(); 
     }
     converttodecimal = Integer.parseInt(st,2);// integer.parseInt(String , int radix);

     System.out.println("the equivalent decimal value is: " +converttodecimal ); 
  }
   }//end of main method

  public static boolean validbinary(String st) { 
  for (int i = 0; i < st.length(); i++) {
     if (st.charAt(i) != '0' && st.charAt(i) != '1') {
        return false;
      }
  }

  return true;
  }

}//end of class

这是输出:

  

输入二进制数转换为十进制:

     

110101

     

等效小数值为:53

先谢谢你,我已经问过这个问题,但我没有得到我想要的答案。

更新:

我根据您的建议再次编写程序@akhil_mittal @fabian但是如果我想在程序本身编写转换方法(不调用方法)我该怎么做? 这是代码:

 import java.util.*;
 import java.lang.*;
  public class Assignment2test
  {static Scanner stdIn= new Scanner (System.in);
  public static void main(String[] args) {

  {String st;
     int result;


     System.out.println("enter a binary number to convert to decimal: ");
     st = stdIn.next();

     while(!validbinary(st)) { 

        System.out.println("invalid value, enter a binary number which consists of 1s and 0s only: "); 
        st = stdIn.next(); 
     }
     result = convertBinaryToDecimal(st);



           System.out.println("the equivalent decimal value is: " + result ); 

}

 }//end of main method

 public static boolean validbinary(String st) { 
  for (int i = 0; i < st.length(); i++) {
     if (st.charAt(i) != '0' && st.charAt(i) != '1') {
        return false;
     }
  }

  return true;
  }

 public static int convertBinaryToDecimal(String st){
    double decimal =0;
    for(int i=0;i<st.length();i++){
        if(st.charAt(i)== '1'){
            decimal = decimal + Math.pow(2,st.length()-1-i);
        }
    }
    return (int) decimal;
}
 }
   //end of class

4 个答案:

答案 0 :(得分:0)

手动执行,您可以将每个数字乘以相应的2的幂并对结果求和。

关于问题的最后一部分,你可以简单地使用java.lang.Math.pow(2,exponent),如果那是你想知道的,那就没有特定的操作符。

答案 1 :(得分:0)

二进制到十进制转换,不使用Integer.parseInt方法

public class BinaryDecimal 
{
    public static int binaryToDecimal(int binary) {
        int decimal = 0;
        for (int power = 1; binary > 0; power *= 2, binary /= 10)
            decimal += power * (binary % 10);       
        return decimal;
    }

    public static void main(String a[]) {
        System.out.println("11 ===> " + binaryToDecimal(11));
        //System.out.println("11 ===> " + binaryToDecimal(Integer.parseInt(a[0]))); //Input from command line
    }
}

答案 2 :(得分:0)

我编写了两个使用基本计算将二进制转换为十进制的方法,一个用long,另一个用String。您还可以使用它们来检查实现中的差异。该方法非常简单易懂。

    public static int convertBinaryToDecimal(String binary){
        double decimal =0;
        for(int i=0;i<binary.length();i++){
            if(binary.charAt(i)== '1'){
                decimal = decimal + Math.pow(2,binary.length()-1-i);
            }
        }
        return (int) decimal;
    }

    public static int convertBinaryToDecimal(long numberInBinary){
        int decimal = 0;
        int power = 0;
        while(true){
            if(numberInBinary == 0){
                break;
            } else {
                long temp = numberInBinary%10;
                decimal += temp*Math.pow(2, power);
                numberInBinary = numberInBinary/10;
                power++;
            }
        }
        return decimal;
    }

    public static void main(String a[]){
        int binaryNumber = 110011;
        System.out.println(binaryNumber+ " converts to "+convertBinaryToDecimal(binaryNumber));
        String binaryNumberInString = "110011";
        System.out.println(binaryNumber+ " converts to "+convertBinaryToDecimal(binaryNumberInString));
    }

如果您想确保字符串只包含01,那么您可以尝试自己,如果您需要任何帮助,请告诉我。

答案 3 :(得分:0)

您可以使用位移运算符来获得2的幂:

int pow2(int exponent) {
    return 1 << exponent;
}

应该比Math.pow更有效。

但你也可以像这样计算一个二进制数(0b110101的例子):

((((((1)*2+1)*2+0)*2+1)*2+0)*2+1)

即。通过重复乘以2并添加下一个数字。