关于Java中下标越界问题

publicclassclass2{publicstaticvoidmain(String[]args){char[]letter=getletter();System.... public class class2 {
public static void main(String[] args) {

char[] letter = getletter();

System.out.println("The lowercase letters are: ");
display(letter);

int[] count = countletter(letter);

System.out.println();
System.out.println("The occurances of each letter are: ");

showresult(count);

}

public static char[] getletter(){
char[] letter = new char[100];
String number = "abcdefghijklmnopqrstuvwxyz";
for(int i=0;i<letter.length;i++){
letter[i]=number.charAt((int)(Math.random()*26));
}
return letter;
}

public static void display(char[] letter){
for(int i=0;i<letter.length;i++){
if((i+1)%20==0) System.out.println(letter[i]);
else System.out.print(letter[i]+" ");
}
}

public static int[] countletter(char[] letter){
int[] count = new int[26];
for(int i = 0;i<letter.length;i++){
count[letter[i] - 'a']++;
}
return count;

}

public static void showresult(int[] count){
for(int i=0;i<100;i++){
if ((i+1)%10==0) System.out.println((char)(i+'a')+":"+count[i]);
else System.out.print((char)(i+'a')+":"+count[i]+" ");
}
}
}

这是我的代码,然后输出的答案也没错,但是报错说越界了,请问一下是哪个地方越界了,为什么会这样?
展开
 我来答
百度网友090def6
推荐于2016-01-30 · TA获得超过2211个赞
知道小有建树答主
回答量:558
采纳率:100%
帮助的人:710万
展开全部
public static void showresult(int[] count) {
  // 这里使用数组长度     
  for (int i = 0; i < count.length; i++) {    
   if ((i + 1) % 10 == 0)
    System.out.println((char) (i + 'a') + ":" + count[i]);
   else
    System.out.print((char) (i + 'a') + ":" + count[i] + " ");
  }
 }

 你的入参count长度只有26,循环中<100,所以越界

这里是对数组操作,不要写死长度,直接使用数组长度

追问

那我应该怎么修改才是不写死长度?

然后我把26改大了变成了200,然后输出结果变成了

我该怎么修改代码使得后面的 ?:0不输出?

麻烦看一看,太感谢!

追答

你是对字母的统计吧

public static int[] countletter(char[] letter) {
  // 你这里返回的对字母的统计,所以是count的长度是26
  // 因为字母只有26个
  // 所以不需要改成100,因为showresult()方法不关心你的具体长度
  int[] count = new int[26];
  for (int i = 0; i < letter.length; i++) {
   count[letter[i] - 'a']++;
  }
  return count;
 }
 // 这个方法入参是数组,并对这个数组操作
 // 因为事先不知道数组长度,所for的最大值通过数组length操作
 public static void showresult(int[] count) {
  // for (int i = 0; i < 100; i++) {
  for (int i = 0; i < count.length; i++) {
   if ((i + 1) % 10 == 0)
    System.out.println((char) (i + 'a') + ":" + count[i]);
   else
    System.out.print((char) (i + 'a') + ":" + count[i] + " ");
  }
 }
余阿木
2014-04-19
知道答主
回答量:13
采纳率:0%
帮助的人:6万
展开全部
你定义的count【】数组长度为26,而
for(int i=0;i<100;i++){
if ((i+1)%10==0) System.out.println((char)(i+'a')+":"+count[i]);
else System.out.print((char)(i+'a')+":"+count[i]+" ");
}
}count【i】(imax=99)这当然会报错。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式