2012-11-18 47 views
0

这就是我所拥有的但它不起作用,这对我来说是令人困惑的。如果你向下滚动,我评论了某人发布的确切问题,我正在尝试做什么。我想也许这个问题是我的代码来生成随机字符:计算数组中字符的出现次数

public void add (char fromChar, char toChar){ 
    Random r = new Random(); //creates a random object 
    int randInt; 
    for (int i=0; i<charArray.length; i++){ 
     randInt = r.nextInt((toChar-fromChar) +1); 
     charArray[i] = (char) randInt; //casts these integers as characters 
    } 
}//end add 
public int[] countLetters() { 
int[] count = new int[26]; 
char current; 

    for (int b = 0; b <= 26; b++) { 
     for (int i = 97; i <= 123; i++) { 
      char a = (char) i; 
      for (int ch = 0; ch < charArray.length; ch++) { 
       current = charArray[ch]; 
       if (current == a) { 
       count[b]++; 
       } 
      } 
     } 
    } 
return count; 
} 
+1

为什么它不工作?怎么了? – SLaks

+0

最好的方法是首先对数组进行排序,然后扫描数组以检查是否存在重复并增加计数。 – PermGenError

+0

我们可以从你的代码中猜测,你正在尝试在count [0]中存储a的个数,在count中存储b的个数[1],在count [2]中c的个数等等,但是你需要准确告诉我们你的问题是什么。哪里不对? –

回答

0

不知道是否有其他错误,但你迭代b从0到26(包括端点),并把它作为指数为count[]长度26的这个数组从0有效的指标以上,25以下,并与26

访问它时,它应该是您会收到IndexOutOfBoundsException

... 
for (int b = 0; b < 26; b++) 
... 
0

不知道这就是答案,因为我们不'不知道发生了什么事。 但是,这里有一些东西,你的int [] count数组有26个索引,但你计数到27: for(int b = 0; b < = 26; i ++) - >这将导致27个索引。 这种尝试:

public int[] countLetters() { 
    int[] count = new int[26]; 
    char current; 

    for (int b = 0; b < 26; b++) { 
     for (int i = 97; i < 123; i++) { 
      char a = (char) i; 
      for (int ch = 0; ch < charArray.length; ch++) { 
       current = charArray[ch]; 
       if (current == a) { 
        count[b]++; 
       } 
      } 
     } 
    } 
    return count; 
} 

小错误,感谢费边

+0

Java数组从0开始。您的代码将使用索引26访问长度为26的数组。这会导致IndexOutOfBoundsException。对于26号阵列,有效索引为0-25。 –

+0

你是对的,没有注意到...现在应该没事 – DerpyNerd

+0

它仍然没有工作。程序基本上创建了一个随机字符数组(charArray)。我正在计算不同字符的出现并将结果存储在名为count的数组中。数组中的第一个元素存储“a”的出现次数等等。每次打印数组时,都会说每个字符有0次出现。这是我的问题。 –

0

这里是你想要的东西:

这是文件charCounter.java

import java.util.*; 
import java.awt.*; 

public class charCounter 
{ 
    char[] charArray = new char[50]; 
    int randInt; 
    Random r = new Random(); 

    public charCounter() 
    {} 

    public void create() 
    { 
      for (int i=0; i<charArray.length; i++) 
     { 
       randInt = 97+r.nextInt(26); 
       charArray[i] = (char) randInt; //casts these integers as characters 
      } 
    } 

    public void printCharArray() 
    { 
     for(int i=0; i<charArray.length; i++) 
     { 
       System.out.println(charArray[i]); 
     } 
    } 

    public int[] countLetters() 
    { 
     int[] count = new int[26]; 
     int index = 0; 
      for(int i=0; i<charArray.length; i++) 
     { 
      index = ((int)charArray[i])-97; 
      count[index]++; 
     } 
     return count; 
    } 
} 

这里是我制作的驱动程序:

public class driver 
{ 
    public static void main(String args[]) 
    { 
     charCounter c = new charCounter(); 
     int[] printThis; 

     c.create(); 
     printThis = c.countLetters(); 

     for(int i=0; i<printThis.length; i++) 
     { 
      System.out.println(printThis[i]); 
     } 
    } 
} 
相关问题