一道简单java编程题求找问题

晨风牧笛 2018-12-15 04:00:17

请问为什么会提示数组越界
...全文
760 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
我要乱来呢 2018-12-20
  • 打赏
  • 举报
回复
引用 6 楼 梦里梦到梦里梦 的回复:
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String str=in.next();
while(str!="end"){
char[] a=str.toCharArray();
char b=a[0];
int count=0;
for(int i=0;i<a.length;i++){
if(a[i]==b){
count++;
if(i==a.length-1){
System.out.print(count+""+b);
}
}else{
System.out.print(count+""+b);
b=a[i];
count=1;
}
}
System.out.println();
str=in.next();
}
}

}

你的第十行判断条件存在问题,当i循环到a.length-1时会执行判断while(a[a.length]== a[a.length-1]),数组下标越界
还是这个舒服
越学越自闭 2018-12-17
  • 打赏
  • 举报
回复
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
String str=in.next();
while(str!="end"){
char[] a=str.toCharArray();
char b=a[0];
int count=0;
for(int i=0;i<a.length;i++){
if(a[i]==b){
count++;
if(i==a.length-1){
System.out.print(count+""+b);
}
}else{
System.out.print(count+""+b);
b=a[i];
count=1;
}
}
System.out.println();
str=in.next();
}
}

}

你的第十行判断条件存在问题,当i循环到a.length-1时会执行判断while(a[a.length]== a[a.length-1]),数组下标越界
命z 2018-12-17
  • 打赏
  • 举报
回复
你的逻辑也是有问题的,假设只有一次a[i++] == a[i],证明至少有两个相同,但是你的count却为1。 你可以定义一个char变量b,将数组的第一个字符赋值给b,然后再循环数组每当有相同字符那么执行count++(注意count初始值是1),假设当到第i个下标的时候与b不相等,那么将此字符再赋值给b,并从第i+1个位置开始循环。这样的逻辑更简单易懂。
命z 2018-12-17
  • 打赏
  • 举报
回复
while(a[i++] == a[i])有问题,当i=a.length-2时,此时相当于判断(a[a.length-2] == a[a.length-1])这里是正确的。但是当进行下一次循环的时候就是判断:(a[a.length-1] == a[a.length])此时a[a.length]就是越界了。
RUA好多鱼~ 2018-12-17
  • 打赏
  • 举报
回复
这句 while(a[i++] == a[i]) 你的i一直在自增,当判断到i++为字符数组最后一位的时候你的while循环结束之后还会在走条件判断和后一位是否相同,所以还会再i++一次,这时i++就刚好超出数组长度了,就导致了数组长度越界,好像是这样 我没有debug 你可以debug试试
Izombie 2018-12-16
  • 打赏
  • 举报
回复
while(a[i++] == a[i])
这句需要加上 i<a.length 的判断
yangjuanli 2018-12-16
  • 打赏
  • 举报
回复
i<a.length即可,不用-1.

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧