为什么此代码不起作用 - 调试当前指令指针问题

时间:2014-07-09 12:12:27

标签: java debugging

我一直在尝试修复此代码。问题是找到字符串的等效数字,遵循字母系列ABCDEF在Fibonacci系列A=0, B=1, C=1, D=2, E=3, F=5中的规则。防爆。 ABC = 0 + 1 + 1 = 2(输出)。

当我运行代码时,它会在for循环中显示一个调试当前指令指针。有什么不对,为什么?

 public class faboalpha {

        public static void main(String[]args){
            String gst="MAN";
            char ser[]={'A','B','C','D','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};

            int cor[]=new int[26];
            cor[0]=0;
            cor[1]=1;
            cor[2]=1;
            for(int i=3;i<26;i++)
                cor[i]=cor[i-1]+cor[i-2];

            char gchar[]=new char[gst.length()];
            for(int i=0;i<gst.length();i++)
                gchar[i]=gst.charAt(i);

            int sum=0;
            for(int i=0;i<gst.length();i++){
                for(int j=0;j<=25;j++){
                    if(gchar[i]==ser[j]) // <----------- Debug Current Instructor Pointer, why?
                        sum=sum+cor[j];
                }
            }

            System.out.println(sum);
        }


}

1 个答案:

答案 0 :(得分:1)

问题是,对于j = 25,索引超出范围,因为ser[]数组太短,即ser.length最可能小于26,因此{{1}会导致你的错误。

提示:寻找似乎缺失的字母ser[j]'E')。

第二个提示:尝试按照消息使用调试器来调试那里发生的事情。

第三个提示:我个人使用'A','B','C','D','F',...代替for(int i=3;i<cor.length;i++)for(int i=3;i<26;i++)代替for(int j=0;j<ser.length;j++)。 实际上,我甚至可能会将for(int j=0;j<=25;j++)初始化为cor[]或检查它们是否都是等长的。