关于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]+" ");
}
}
}
这是我的代码,然后输出的答案也没错,但是报错说越界了,请问一下是哪个地方越界了,为什么会这样? 展开
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]+" ");
}
}
}
这是我的代码,然后输出的答案也没错,但是报错说越界了,请问一下是哪个地方越界了,为什么会这样? 展开
展开全部
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,所以越界
这里是对数组操作,不要写死长度,直接使用数组长度
追答
你是对字母的统计吧
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] + " ");
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询