【问题标题】:Take user input, put into an array and print out how many times each letter is used获取用户输入,放入一个数组并打印出每个字母使用了多少次
【发布时间】:2016-08-20 23:33:47
【问题描述】:

我正在尝试编写这个程序,以便当用户输入一行文本时,他们会得到一个图表,显示每个字母被使用了多少次。我把它分解成一个数组,但我一直收到“counts[letters[a] == 'a']++;”的错误说我不能将字符串转换为 char 或将布尔值转换为 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 
}

【问题讨论】:

  • 使用counts[letters[a] -'a']++; 而不是counts[letters[a] == 'a']++;。原因:在 count[index] 中,索引是 int 类型。当您执行letters[a] == 'a' 时,这将返回一个布尔值。

标签: java arrays char


【解决方案1】:

如果您使用地图,您可以轻松地做到这一点而不会复杂..

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 "";
    }
}

【讨论】:

    【解决方案2】:

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

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

    您真正想要的是HashMap,它将每个字符映射到您在数组中看到它的次数。我这里就不放答案了,查一下Java中的HashMaps,你会找到你需要的线索。

    【讨论】:

      【解决方案3】:

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

      我猜您每次遇到一个字母时都会尝试将“字典”值增加 1。 可以通过letters[a] - 'a'获取索引

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

      补充:

      • 您应该使用 for (int i = ... 进行索引(i 而不是 a,如果您这样命名您的 index,它很容易混淆变量)
      • 您必须使 在开始执行此操作之前,请确保所有字符都是小写的, 因为正如您在上表中看到的'B' - 'a''b' - 'a' 是两种截然不同的东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-03
        相关资源
        最近更新 更多