[英]errors reading how many times a character occurs in a string
我正在極度沮喪的時間內嘗試從我的程序之一中刪除該錯誤。 基本上,我的程序接收一個字符串,並讀取每個鍵盤字符在該字符串中出現的次數,然后顯示它。
即使滿足條件,我正在運行的主循環也會讀取字符,但不會運行。
您知道什么地方可能出問題嗎?
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]);
}
}
}
一個問題是,就像在創建字符串時必須在字符串周圍加上“”一樣,必須在字符周圍加上“”以使系統知道它是什么。
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超出范圍,它將退出測試,然后調用它們在數組中的位置並導致錯誤。
您可以使用字典/哈希圖。 字典不僅可以用於計算字母,還可以用於統計單詞和數據中的其他出現次數。 字符串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");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.