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



,所以这是我的第一个编程课程,我有一个将用户输入的二进制编号转换为小数的分配。我的二进制号应存储在A字符串中。为了检查我的所有数字是1和0,我需要使用一种方法来确保其有效,如果数字正确,否则为false,则返回true。因此,我进行了搜索,发现每个人都在使用integer.parseInt(String , int radix)方法将二进制字符串转换为INT,该字符串完全效果很好,但是,唯一的问题是我们没有与我的教授一起接受这一点,所以我不确定是否还可以也许他想要另一种转换方式?

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

这是我的代码:

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

手动执行此操作,您可以将每个数字乘以两个相应的功率并总和结果。

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

您可以使用位移动操作员获得2:

的功率
int pow2(int exponent) {
    return 1 << exponent;
}

应该比Math.pow更有效。

,但您也可以计算出这样的二进制数字(0b110101的示例):

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

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

我编写了两种方法,使用基本计算将二进制转换为十进制,一个采用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,则可以尝试一下,让我知道您是否需要任何帮助。

二进制转换为十进制转换而不使用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
    }
}

最新更新