Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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 为什么此for循环会遇到ArrayIndexOtOfBounds错误?(爪哇)_Java_Data Conversion_Radix - Fatal编程技术网

Java 为什么此for循环会遇到ArrayIndexOtOfBounds错误?(爪哇)

Java 为什么此for循环会遇到ArrayIndexOtOfBounds错误?(爪哇),java,data-conversion,radix,Java,Data Conversion,Radix,我要做的是让我的代码将整数转换为基数2,然后将这些值转换为字符串数组中的元素。我试图避免使用Integer.toBinary()。如果我能得到一些帮助,那将是非常有帮助的 public String[] streamChars(int[] colAvgs) { String avgString = Arrays.toString(colAvgs); String convBases[] = avgString.split(","); int remainder; for (int a =

我要做的是让我的代码将整数转换为基数2,然后将这些值转换为字符串数组中的元素。我试图避免使用Integer.toBinary()。如果我能得到一些帮助,那将是非常有帮助的

public String[] streamChars(int[] colAvgs)
{
 String avgString = Arrays.toString(colAvgs);
 String convBases[] = avgString.split(",");
 int remainder;
 for (int a =0;a<colAvgs.length;a++)
 {
  remainder = colAvgs[a];
   while(remainder>0)
    {
     remainder = remainder%2;
     if ((remainder%2)==0|| (remainder%2)==1)
      {
       convbases[a] = Integer.toString(remainder);
       a++;
      }//end if
    }//end while
 }//end for
return convbases;
}//end streamChars
public String[]streamChars(int[]colAvgs)
{
字符串avgString=Arrays.toString(colAvgs);
字符串convbase[]=avgString.split(“,”);
整数余数;
对于(int a=0;a0)
{
余数=余数%2;
如果((余数%2)==0 | |(余数%2)==1)
{
convbases[a]=整数.toString(余数);
a++;
}//如果结束
}//结束时
}//结束
返回基地;
}//尾流字符

谢谢你抽出时间

因为它在
while(余数>0)
循环中使用并增加
a
,而从不检查
a
是否保持
。(顺便说一句,它在一个地方是
convbase
,但在另一个地方是
convbase
,这应该会阻止代码编译;Java是区分大小写的。)

public String[]streamChars(int[]colAvgs)
{
字符串avgString=Arrays.toString(colAvgs);
字符串convbase[]=avgString.split(“,”);
整数余数;
对于(int a=0;a0)
{
余数=余数%2;
如果((余数%2)==0 | |(余数%2)==1)
{
convbases[a]=整数.toString(余数);
//^^^^^^^^^^^^^------------------------使用它
a++;
//^^^^------------------------------------------递增
}//如果结束
}//结束时
}//结束
返回基地;
}//尾流字符

因为它在
while(余数>0)
循环中既使用又增加
a
,而从不检查
a
是否保持
。(顺便说一句,它在一个地方是
convbase
,但在另一个地方是
convbase
,这应该会阻止代码编译;Java是区分大小写的。)

public String[]streamChars(int[]colAvgs)
{
字符串avgString=Arrays.toString(colAvgs);
字符串convbase[]=avgString.split(“,”);
整数余数;
对于(int a=0;a0)
{
余数=余数%2;
如果((余数%2)==0 | |(余数%2)==1)
{
convbases[a]=整数.toString(余数);
//^^^^^^^^^^^^^------------------------使用它
a++;
//^^^^------------------------------------------递增
}//如果结束
}//结束时
}//结束
返回基地;
}//尾流字符

在a达到colAvgs值之前,您的余数不等于0,之后,尝试访问convbases[a]崩溃

您的while应该考虑a不能高于或等于colAvgs

int size = colAvgs.length;
for (int a =0;a<size;a++)
 {
  remainder = colAvgs[a];
   while(remainder>0 && a<size)
    {
     remainder = remainder%2;
     if ((remainder%2)==0|| (remainder%2)==1)
      {
       convbases[a] = Integer.toString(remainder);
       a++;
      }//end if
    }//end while
 }//end for
if(remainder>0) //you know it finished due to a being too big.
else //this is what you want to happen
int size=colAvgs.length;
对于(int a=0;a0&&a0)//您知道它是由于a太大而完成的。
否则//这就是你想要发生的事情

然而,我认为重要的是要注意,不在for循环中修改循环变量是一种很好的做法,因为这是for工作的一部分。您不应该在while循环中执行
a++
。当您确切地知道循环将运行的迭代次数时,就可以使用for循环。你这里没有这些信息。因此,您应该要么更改循环条件(在本例中,
a在a达到colAvgs值之前,您的余数不会使其变为0,然后,尝试访问convbase[a]崩溃

您的while应该考虑a不能高于或等于colAvgs

int size = colAvgs.length;
for (int a =0;a<size;a++)
 {
  remainder = colAvgs[a];
   while(remainder>0 && a<size)
    {
     remainder = remainder%2;
     if ((remainder%2)==0|| (remainder%2)==1)
      {
       convbases[a] = Integer.toString(remainder);
       a++;
      }//end if
    }//end while
 }//end for
if(remainder>0) //you know it finished due to a being too big.
else //this is what you want to happen
int size=colAvgs.length;
对于(int a=0;a0&&a0)//您知道它是由于a太大而完成的。
否则//这就是你想要发生的事情
但是,我认为重要的是要注意,不在for循环中修改循环变量是一种很好的做法,因为这是for的工作的一部分。您不应该在while循环中执行
a++
。当您确切地知道循环将运行的迭代次数时,您可以使用for循环。这里没有这些信息。因此,y您应该更改循环条件(在本例中为
a