Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的方法有什么问题?_Java - Fatal编程技术网

Java 我的方法有什么问题?

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 =

我只是想创建一个方法,可以将一个数字从二进制(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 = 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;ival=(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。非常感谢您的帮助