string o = "meow"
public static void swapPairs(String o){
char x;
char y;
char[] oc = o.toCharArray();
//Array goes out of bounds, but it still works.
for(int i = 0; i<= oc.length+2;i=i+2){
x=oc[i];
oc[i]=oc[i+1];
oc[i+1]=x;
System.out.println(oc[i]+"\n"+oc[i+1]);
}
}
此方法的目标是交换字符串中的每两个字符,我搜索了但无法理解其他解决方案。这个方法适用于“meow”这个词,但仍然会出界。为什么?
如果 Google 将您发送到此处:我在数组末尾添加了两个,而不是删除了两个。简单的错误总是偷偷地发生在我身上。
编辑:现在我遇到了字符串不均匀的问题。如果不匹配,如何告诉编译器只保留最后一个字符?
最佳答案
oc.length
将返回 oc
的长度数组。
数组是从 0 索引的,这意味着数组中的最后一个元素将为 oc.length-1
.
i<=oc.length+2
意味着你的循环将继续直到 i
比最后一个索引晚了 3。而且,在循环中,您尝试访问索引 i+1
如果程序允许,将一直到最后一个索引之后的第四索引。
鉴于您正在尝试访问oc[i+1]
,您需要更改您的for
循环看起来更像这样:
for(int i=0; i<oc.length-1; i=i+2)
请注意,这是 <
,而不是<=
.
要打印它,如果您希望将其全部放在一行上,您可以在循环之后执行此操作:
System.out.println(new String(oc));
<小时/>
另一个注意事项,这可能有助于您在发布到 StackOverflow 之前更全面地理解问题,如果您在 Eclipse(也许还有其他一些程序)中编写,堆栈跟踪会告诉您的不仅仅是 OBE。很高兴您至少阅读了该内容,并且可以将发布的代码缩小到错误发生的确切位置,但是如果您足够仔细,该堆栈跟踪通常会告诉您尝试访问的索引号,并且它会告诉您数组中最后一个可用索引的编号。
关于java - 我如何阻止它超出范围,为什么我已经在做的事情不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20508017/