所以这是我的第一个编程课程,我有一个将用户输入的二进制数转换为小数的赋值。我的二进制数应该存储在一个字符串中。
要检查我的所有数字是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
答案 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));
}
如果您想确保字符串只包含0
和1
,那么您可以尝试自己,如果您需要任何帮助,请告诉我。
答案 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并添加下一个数字。