获取用户输入,放入数组并打印出每个字母的使用次数

时间:2016-04-26 22:16:58

标签: java arrays char

我正在尝试编写此程序,以便当用户输入一行文本时,会给出一个图表,显示每个字母的使用次数。我把它分成了一个数组,但我不断收到“计数[字母[a] =='a'] ++;”的错误说我不能将字符串转换为char或布尔值转换为int,具体取决于我的方式。我无法弄清楚为什么它不是所有的char。

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 
}

3 个答案:

答案 0 :(得分:0)

表达式letters[a] == 'a'产生一个布尔答案(1或0),但你有一个索引数组,该数组必须是一个int。

你基本上告诉Java的是counts[true]++counts[false]++,这没有任何意义。

你真正想要的是HashMap,它将每个角色映射到你在数组中看到它的次数。我不会在这里给出答案,但是在Java中查找HashMaps,你会找到你需要的线索。

答案 1 :(得分:0)

count [___]期望一个Integer索引,而你的表达式letters[a] == 'a'返回一个布尔值

我猜你每次收到一封信都试图将'Dictionary'值增加1。 您可以通过letters[a] - 'a'

获取索引

由于ASCII table中的顺序,字母'a'等于97,如果减去另一个字母,说'b'是98,将产生索引1,这是你的base26的正确位置'字典'

额外:

  • 您应该使用for (int i = ...进行索引( i 而不是a,如果您将 i ndex命名为 i ,则易于混合变量)
  • 你必须做 确保在开始这样做之前所有字符都是小写的, 因为您可以在上面的表'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 "";
    }
}