2014-02-16 58 views
0

我有一个非常令人沮丧的时间试图从我的程序中获取错误。基本上我的程序需要一个字符串,并读取每个键盘字符在字符串中出现的次数,然后显示它。错误读取一个字符在字符串中出现多少次

我正在运行的主循环是读取字符,但不会贯穿,即使条件满足。

你有什么想法可能是错的?

import java.util.Scanner; 

public class mainClass { 

public static void main (String[] args){ 

    Scanner myScanner = new Scanner(System.in); 
    System.out.println("Please enter array"); 
    String inputString = myScanner.nextLine(); //input array entered 
    myScanner.close(); 

      char[] charTypes = {a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,0,1,2,3,4,5,6,7,8,9,`,~,!,@,#,$,%,^,&,*,(,),-,_,=,+,[,{,],},;,:}; 

    char[] charArray = new char[inputString.length()]; 


    for (int i =0; i<=inputString.length()-1;i++){ //conversion of string to character array 

     charArray[i]= inputString.charAt(i); 
     System.out.print(" "+ charArray[i] +" "); 

    } 


    int i1=0; 
    int i2=0; 
    int charCounter[] = new int[84]; //This array holds the amount of times each corresponding character occurs in a string 

while (i1<=charArray.length-1){ 

    if(charArray[i1]==charTypes[i2] && i22<83 && i1<charArray.length-1){ 

     charCounter[i22]++; 
     i1++; 
     i22=0; 

    }else if(charArray[i1] != charTypes[i2] && i22<83 && i1<charArray.length-1){ 

     i22++; 

    }else{System.out.println("Not even running through the if's");//introduced as as tests to see if the conditions of the two if statements were being met} 
} 

for(int i = 0; i<=91;i++){ // prints out how many times each character occurs 

    System.out.println(charTypes[i]+" : "+ charCounter[i]); 

    } 
} 
} 
+2

看看'String#toCharArray()'。 –

+0

然后学习如何使用调试器。 –

+0

你在哪里做检查如“我<= inputString.length() - 1” - 只是说“我

回答

0

的一个问题是,就像你在创建它,你必须把'围绕一个字符来让系统知道它是什么把“”围绕一个字符串。

char[] charTypes = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n', 
'o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F', 
'G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X', 
'Y','Z','0','1','2','3','4','5','6','7','8','9','`','~','!','@','#','$', 
'%','^','&','*','(',')','-','_','=','+','[','{',']','}',';',':'}; 

在上面的代码中,似乎有一个错字,在几处引用i2为i22。

另一个问题是你的循环条件设置的方式。目前:本

if(charArray[i1]==charTypes[i2] && i2<83 && i1<charArray.length-1){ 

的一个问题是,你在位置I1和I2比较数组中的元素你检查,以确保他们没有出界前。如果您将其更改为:

if(i2<83 && i1<charArray.length-1 && charArray[i1]==charTypes[i2]){ 

那么它将退出测试了一次,它看到I1或I2是出界,呼吁他们的阵列中的位置,并导致错误之前。

0

你可以使用字典/散列图。字典不仅可以用来计算字母,还可以用于数据中的字词和其他事件。 String inputString = myScanner.nextLine();

Map<char, Integer> list = new HashMap<char, Integer>(); 

for(char element: inputString){ 
    if(list.containsKey(c))//if char exist 
    { 
     list.put(element,list.get(element)+1);//increase value by 1 
    } 
    else{ 
     list.put(element,1);//add char with value 1 
    }   
} 

这应该给你一个字符串tex中所有字符计数的列表。 然后你可以像这样打印它们。

for (Map.Entry<char, Integer> entry : list.entrySet()) { 
    char key = entry.getKey(); 
    Integer value = entry.getValue(); 
    System.out.println(key+ " occurs " + value + " times"); 
} 
相关问题