数组在Java中超出范围

时间:2014-09-25 15:52:00

标签: java arrays

我试图在100个字符的随机数组中计算从a到z的每个字符的数量。

import java.util.Random;
public class RandomChars {

    public static void main(String[] args) {
        Random r = new Random();
        String chars= "abcdefghijklmnopqrtuvwxyz";
        String[] countc = new String[26];
        char[] charArray = new char[100];
        for(int i = 1;i<=100;i++)
        {
            charArray[i-1]=chars.charAt(r.nextInt(chars.length()));

            System.out.print(chars.charAt(r.nextInt(chars.length())));
            if(i%20==0)
            {
                System.out.println("");
            }
        }
        //System.out.println(charArray.length);
        int m = 0;
        int p=0;
        for(int n = 0;n<100;n++)
        {
            char xx = chars.charAt(n);
            m = 0;
            p=0;
            do
            {
                if(charArray[m]==xx)
                {
                    p=p+1;

                }
                m=m+1;
            }while(m<=charArray.length);
            countc[n]=""+p+""+xx;
        }
        System.out.println("The count of each character is "+ countc);
    }                   
}

5 个答案:

答案 0 :(得分:1)

> for(int n = 0;n<100;n++)

应该是

for (int n =0; n<99; n++)

charArray = 0 to 99 (i-1),但下面的子程序是0到100 (int n)

答案 1 :(得分:0)

改变这个:

m<=charArray.length

对此:

m<charArray.length

答案 2 :(得分:0)

do
{
    /* ... */
}while(m<=charArray.length);

在最后一次迭代中,m将等于charArray.length,因此当您致电charArray[m]时,它将超出界限。将其更改为while(m < charArray.length);

答案 3 :(得分:0)

char xx = chars.charAt(n);当chars.charAt()可以采用25的最大参数时,一直被调用到99.你需要修复你的循环逻辑,以便检查26个可能字符中的每一个的所有100个元素,而不是相反

编辑:你的do..while循环也发生了同样的事情。

答案 4 :(得分:0)

首先,您的String chars省略了&#39; s&#39;所以我已经添加了它并更新了代码,使其工作方式略有不同。

创建charArray后,它会迭代每个字符26次(每个字母一次)。可能有更好的方法来做到这一点,但我对Java不太热。

import java.util.Random;
import java.util.Arrays;
public class RandomChars {
  public static void main(String[] args) {

    Random r = new Random();
    String chars= "abcdefghijklmnopqrstuvwxyz";//added the 's'?
    String[] countc = new String[26];
    char[] charArray = new char[100];
    for(int i=0; i<100; i++){
        charArray[i]=chars.charAt(r.nextInt(chars.length()));
        System.out.print(charArray[i]);
        if((i+1)%20==0){
            System.out.println("");
        }
    }

    for(int n=0; n<26; n++){//for each of the 26 chars
        char xx = (char)chars.charAt(n);
        int p=0;

        for(int a=0; a<100; a++){//loop through the charArray and count the matches
            if(charArray[a]==xx){
                p++;
            }
         }

         countc[n]=""+xx+":"+p;
    }
    System.out.println("The count of each character is "+Arrays.toString(countc));

  }
}

http://runnable.com/VCRLPa-2kdoqq2dW/stackoverflow-com-questions-26042877-for-java