Java 我的方法有什么问题?
我只是想创建一个方法,可以将一个数字从二进制(base2)转换为十进制(base10)。但是我遇到了一些问题。我不知道如何纠正它。这是我的方法Java 我的方法有什么问题?,java,Java,我只是想创建一个方法,可以将一个数字从二进制(base2)转换为十进制(base10)。但是我遇到了一些问题。我不知道如何纠正它。这是我的方法 public static int toDecimal (String base2) { int sum=0; for ( int k=base2.length(); int i=0; k>0, i<=base2.length()-1; k--, i++) { char symbol =
public static int toDecimal (String base2)
{
int sum=0;
for ( int k=base2.length(); int i=0; k>0, i<=base2.length()-1; k--, i++)
{
char symbol = base2.charAt(k);
sum= sum+ symbol*i;
}
return sum;
}
公共静态int-toDecimal(字符串base2)
{
整数和=0;
for(int k=base2.length();int i=0;k>0,i在for循环中初始化2个变量。它们之间有一个;(分号),但应该有一个,(逗号).实际上,由于for循环语法不正确,您的代码无法工作-您只能在括号内使用;symbol两次。此外,sum=sum+symbol*i;
不是正确的转换公式
这段代码似乎解决了您的问题
public static int toDecimal(String base2) {
int sum=0;
int i = 0;
for (int k = base2.length() - 1; k >= 0; k--) {
sum += Integer.parseInt(String.valueOf(base2.charAt(k))) << i;
i++;
}
return sum;
}
公共静态int-toDecimal(字符串base2){
整数和=0;
int i=0;
对于(int k=base2.length()-1;k>=0;k--){
sum+=Integer.parseInt(String.valueOf(base2.charAt(k))只需对for循环进行一些小的更改即可使代码正常工作
public static int toDecimal(String base2) {
int sum = 0;
for (int k = base2.length() - 1, i = 0; k>=0; k--, i++) {
int symbol = (int)base2.charAt(k)-48;//0 is 48; 1 is 49 in ASCII
sum = (int) (sum + (int) symbol * Math.pow(2, i));
}
return sum;
}
现在,您可以使用
public static int toDecimal( String str) {
int val = 0;
for (int i = 0; i < str.length(); i++) {
val = (val<<1) + ((str.charAt( i ) == '0') ? 0 : 1);
}
return val;
}
publicstaticint-toDecimal(stringstr){
int-val=0;
对于(int i=0;i val=(valI)很抱歉键入整个代码时很笨拙:public static int toDecimal(String base2){int sum=0;for(int k=base2.length();int i=0;k>0,我可能需要使用ParseInt(),因为当所讨论的字符串是“1101”时,您传递的是一个stringHint:String.charAt(0)
,将不会返回1。它将返回49,或0x31
…1
的Unicode码点。到底是什么问题?您得到了什么输出?您希望得到什么?请查看以及。非常感谢。它起了作用。但老实说,我不明白“谢谢你。我感谢你的帮助。非常感谢。但是我不明白这一行”int symbol=(int)base2.charAt(k)-48;//0是48;1是ASCII格式的49”很抱歉,您可能会觉得这很可笑,但由于我是一名java初学者,即使是简单的代码我也很难理解。没问题,@S.Dovra您在ASCII中看到的字符“0”是=48,“1”是49等等。这就是为什么有-48将“0”作为数字0。非常感谢您的帮助