将用户输入放入一个数组中,并打印出每个字母被使用的次数

3

我正在尝试编写这个程序,当用户输入一行文本时,会显示一个图表,显示每个字母使用的次数。我将其分成了一个数组,但是在 "counts [letters [a] =='a'] ++;" 中,我一直收到错误提示说无法将字符串转换为字符或布尔值转换为整数,具体取决于我放置方式。我无法弄清楚为什么它不是全部都是字符。

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 
}

使用counts[letters[a] -'a']++;代替counts[letters[a] == 'a']++;。原因:在count[index]中,index的类型为int。当你执行letters[a] == 'a'时,它返回一个布尔值。 - MSameer
3个回答

0

表达式letters[a] == 'a'的结果是一个布尔值(1或0),但您正在对数组进行索引,这必须是一个整数。

基本上,您告诉Java执行counts[true]++counts[false]++,这毫无意义。

您真正需要的是一个HashMap,将每个字符映射到您在数组中看到它的次数。我不会在此处提供答案,但查找Java中的HashMap,您将找到所需的线索。


0

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

我猜你试图每次遇到字母时将你的“字典”值增加1。 你可以通过 letters[a] - 'a' 获得索引。

由于 ASCII 表 的顺序,字母 'a' 等于 97,如果减去另一个字母,比如 'b' 是 98,将产生索引 1,这是您的基础26“字典”的正确位置。

额外提示:

  • 你应该使用 for (int i = ... 进行索引(用 i 而不是 a,如果你像那样命名你的索引变量,很容易混淆)
  • 在开始执行此操作之前,必须确保所有字符都是小写的,因为正如上面的表格中所示,'B' - 'a''b' - 'a' 是两个非常不同的事情。

0
如果您使用Map,可以轻松地完成此操作而不会使其复杂化。
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 "";
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接