我正在尝试编写此程序,以便当用户输入一行文本时,会给出一个图表,显示每个字母的使用次数。我把它分成了一个数组,但我不断收到“计数[字母[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
}
答案 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 "";
}
}