,所以这是我的第一个编程课程,我有一个将用户输入的二进制编号转换为小数的分配。我的二进制号应存储在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));
}
如果要确保字符串仅包含0
和1
,则可以尝试一下,让我知道您是否需要任何帮助。
二进制转换为十进制转换而不使用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
}
}