我一直在尝试修复此代码。问题是找到字符串的等效数字,遵循字母系列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);
}
}
答案 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[]
或检查它们是否都是等长的。