首页 > 解决方案 > 为什么这个 for 循环会遇到 ArrayIndexOtOfBounds 错误?(爪哇)

问题描述

我想要做的是让我的代码将整数转换为基数 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

感谢您的时间!

标签: javadata-conversionradix

解决方案


a因为它在循环中使用和增加while (remainder > 0),而无需检查以确保a仍然存在< convbases.length。(顺便说一句,它convbases在一个地方,但convBases在另一个地方,这应该会阻止该代码甚至编译;Java 区分大小写。)

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);
//     ^^^^^^^^^^^^------------------------------------- using it
       a++;
//     ^^^^--------------------------------------------- incrementing it
      }//end if
    }//end while
 }//end for
return convbases;
}//end streamChars

推荐阅读