获取用户输入,放入一个数组并打印出每个字母使用了多少次
Posted
技术标签:
【中文标题】获取用户输入,放入一个数组并打印出每个字母使用了多少次【英文标题】: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'
时,这将返回一个布尔值。
【参考方案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'
是两种截然不同的东西。
【讨论】:
以上是关于获取用户输入,放入一个数组并打印出每个字母使用了多少次的主要内容,如果未能解决你的问题,请参考以下文章
Google Sheet Formula:如何计算并打印出数组结果?
编写一个c程序,从键盘输入任意一个五位数,把这个数值分解为单个数字,然后打印出每个数字并且每个数字