这个程序不断给我一个错误:线程“main”java.lang.StringIndexOutOfBoundsException中的异常:字符串索引超出范围:4

这个程序不断给我一个错误:线程“main”java.lang.StringIndexOutOfBoundsException中的异常:字符串索引超出范围:4,java,binary,decimal,Java,Binary,Decimal,当我写这样的代码时,我总是会遇到这样的错误。它肯定是在建立文件,但不是它只是给了我豁免。我是初学者。你们能帮我指出我犯的错误吗 public static int binToDec(int i) { int[] numbers;//initialize variable int f = 4; String iString = "" + i; int result = 0; int length = iString.length(); numbers

当我写这样的代码时,我总是会遇到这样的错误。它肯定是在建立文件,但不是它只是给了我豁免。我是初学者。你们能帮我指出我犯的错误吗

public static int binToDec(int i)
{
    int[] numbers;//initialize variable
    int f = 4;
    String iString = "" + i;
    int result = 0;
    int length = iString.length();
    numbers = new int[length];
    int power;
    for(power = iString.length(); power>=0;power--)
    {
    while(f == length && f >= 0)
    {

        numbers[power] = iString.charAt(power)^power;
    }

    length--;
    f--;
    }
    for(int g = 0; g <= numbers.length; g++)//double check constraints
    {
        result = numbers[g] = numbers[power];
    }

        return result;
}
我还有一个测试文件。这是:

 public class BaseConvertorTester 
  {
public static void main(String args[])

{

    BaseConvertor.binToDec(1010);   

}
}
如果字符串的长度为X,则表示它有X个字符,这些字符的索引从0开始。因此,最后一个字符将位于索引X-1,而不是X

在for循环中,您有:

for (power = iString.length(); power >= 0; power--)
但这意味着,如果iString的长度为4,它将尝试访问索引4处的字符,这将是字符串中第五个不存在的字符,实际上超出了范围。试一试

for (power = iString.length() - 1; power >= 0; power--)
改变

您的循环从4开始,然后到3,然后2,然后1,然后0,这是iString.length仅为4时的5倍。将>=更改为>,将排除0仅运行它4次

我也会改变这个

String iString = "" + i;


更好的编程。

现在,当我尝试运行它时。它根本跑不了。我如何解决这个问题?还有其他问题与异常无关,例如,您有一个无限循环,而lef==length&&f>=0{…},因为您没有修改主体中的f或length。我如何可能解决这个问题?我知道我很麻烦,但谢谢你!那么你的while循环是做什么的呢?我的while循环被用来将二进制数转换成十进制数。挑战是不使用任何to方法。这是学校的挑战吗?如果是这样的话,你的老师就是在破坏to方法的目的。如果不能使用它们,为什么要实现它们?很抱歉,我讨厌老师们在没有必要的时候对程序设置进行大量的限制。无论如何,祝你在挑战中好运。
for(power = iString.length(); power >= 0; power--)
for(power = iString.length(); power > 0; power--)
String iString = "" + i;
String iString = Integer.toString(i);