2016-04-26 60 views
3

我正在嘗試編寫這個程序,以便當用戶輸入一行文本時,會給出一個圖表,顯示每個字母有多少次用過的。我把它分解成一個數組,但我一直得到一個錯誤「計數[字母[a] =='a'] ++;」說我不能將字符串轉換爲字符或布爾值爲int,這取決於我的方式。我不明白爲什麼它不是所有的字符。把用戶輸入,放入一個數組並打印出每個字母被使用多少次

import java.util.*; 

public class AnalysisA { //open class 

public static String input; 
public static String stringA; 

public static void main (String args []) { //open main 

    System.out.println("Please enter a line of text for analysis:"); 

    Scanner sc = new Scanner(System.in); 
    input = sc.nextLine(); 
    input = input.toLowerCase(); 

    System.out.println("Analysis A:");//Analysis A 
    System.out.println(AnalysisA(stringA)); 

} // close main 

public static String AnalysisA (String stringA) { // open analysis A 

    stringA = input; 

    char[] letters = stringA.toCharArray(); 

    int[] counts = new int[26]; 

    for (int a = 0; a < letters.length; a++) { //open for 
    counts[letters[a] == 'a']++; 
    System.out.print(counts); 
    } //close for 
} 
+0

使用'計數[字母[A] -'a'] ++;而不是'計數[字母'[ a] =='a'] ++;'。原因:在count [index]中,索引是int類型的。當你做'字母[a] =='a''時,這將返回一個布爾值。 – MSameer

回答

0

表達letters[a] == 'a'結果在布爾答案(1或0),但你有索引的陣列,它必須是一個整數。

你基本上告訴Java的是做counts[true]++counts[false]++,這是沒有意義的。

你真正想要的是一個HashMap,它將每個字符映射到你在數組中看到它的次數。我不會在這裏提供答案,但在Java中查找HashMaps,你會發現你需要的線索。

0

計數[___]期待一個整數索引,而您的表達letters[a] == 'a'返回一個布爾

即時猜測你想通過1各一個字母被滿足的時間來增加你的「字典」值。 可以通過使letters[a] - 'a'

因爲在ASCII table,字母「a」,其等於97如果減去以另一字母,要說「B」,這是98的順序得到的指數,將產生的索引1,這是爲您的base26「詞典」

額外的正確位置:

  • 您應該使用for (int i = ...索引(代替,它很容易混合變量,如果你命名你個ndex像)
  • 您必須 確保所有的人物都是你開始做這個,之前 因爲你可以在表中看到上述'B' - 'a''b' - 'a' 2件完全不同的事情小寫。
0

如果使用地圖,你可以很容易地做到這一點不復雜..

Map<Character, Integer> map = new HashMap<Character, Integer>(); 


import java.util.HashMap; 
import java.util.Map; 
import java.util.Scanner; 
import java.util.Set; 

public class AnalysisA { // open class 

    public static String input; 

    public static void main(String args[]) { // open main 

     System.out.println("Please enter a line of text for analysis:"); 

     Scanner sc = new Scanner(System.in); 
     input = sc.nextLine(); 
     input = input.toLowerCase(); 
     sc.close(); 
     System.out.println("Analysis A:");// Analysis A 
     System.out.println(Analysis()); 

    } // close main 

    public static String Analysis() { // open analysis A 

     Map<Character, Integer> map = new HashMap<Character, Integer>(); 
     char[] letters = input.toCharArray(); 
     Integer count; 
     for (char letter : letters) { 
      count = map.get(letter); 
      if (count == null || count == 0) { 
       map.put(letter, 1); 
      } else { 
       map.put(letter, ++count); 
      } 
     } 
     Set<Character> set = map.keySet(); 
     for (Character letter : set) { 
      System.out.println(letter + " " + map.get(letter)); 
     } 
     return ""; 
    } 
} 
相關問題