具体代码如下..........编译无问题........运行的时候输入字符串就错误
import javax.swing.JOptionPane;public class test{

public static void main(String[] args){
String s=JOptionPane.showInputDialog("Enter a string:");

int[] counts=count(s.toLowerCase());

String output="";

for(int i=0;i<counts.length;i++){
if(counts[i]!=0){
output+=i+" appears "+counts[i]+((counts[i]==1)?"time\n":"times\n");
}
}
JOptionPane.showMessageDialog(null, output);
}

public static int[] count(String s){
int []counts=new int[10];
char[] chars=s.toCharArray();
for(int i=0;i<s.length();i++){
if(Character.isDigit(chars[i]))
counts[chars[i]]++;
}
return counts;
}

}
Debug模式下运行貌似发现counts[chars[i]]++;这句有问题............我用的eclipse......
求高人解答谢谢!

解决方案 »

  1.   

    确实是语句counts[chars[i]]++;的问题
    替换为int t = Character.getNumericValue(chars[i]);
    counts[t]++;
    因为char转换为int时使用的是ASCII码,如4转换为int就是52了,所以有数组越界异常出项
      

  2.   

    还有一点忘了说了
    main函数里面的for循环不应该用i<counts.length;
    改成i<10;
      

  3.   

    counts[chars[i]]++; chars[i]是字符类型的,要改整形就OK了
      

  4.   

    import javax.swing.JOptionPane; public class Test{ public static void main(String[] args){ 
    String s=JOptionPane.showInputDialog("Enter a string:"); int[] counts=count(s.toLowerCase()); String output=""; for(int i=0;i <counts.length;i++){ 
    if(counts[i]!=0){ 
    output+=i+" appears "+counts[i]+((counts[i]==1)?"time\n":"times\n"); 


    JOptionPane.showMessageDialog(null, output); 
    } public static int[] count(String s){ 
    int []counts=new int[10]; 
    char[] chars=s.toCharArray(); 
    for(int i=0;i <s.length();i++){ 
    if(Character.isDigit(chars[i])) 
    counts[Integer.parseInt(chars[i]+"")]++; 

    return counts; 
    } }