我正在尝试创建一个程序,告诉我一个字母出现在数组中的次数,所以如果数组包含{'a','c','b','a','b','a'}
,它将输出:
a: 3
c: 1
b: 2
。
我正在构建这个程序,所以我可以学习如何思考,所以我只想用基础知识来做。没有Hashmap
和其他更高级的东西。
编辑:这是我的答案,我成功创建了没有 Hashmap
的程序:
public class arrays5 {
public static void main(String[] args) {
char [] arr = {'a', 'b', 'a', 'c', 'b','a'};
char [] letters = new char[arr.length];
int count = 0;
char ch = '_';
boolean isInArray;
for (int i=0; i < arr.length; i++) {
isInArray = false;
for (int j = 0; j < arr.length; j++) {
if (arr[i] == letters[j])
isInArray = true;
}
if (!isInArray)
letters[i] = arr[i];
}
int amountOfLetters = 0;
for (int i = 0; i < letters.length; i++) {
if (letters[i] != '\0')
amountOfLetters++;
}
int index = 0;
char [] newLetters = new char[amountOfLetters];
for (int i = 0; i < letters.length; i++) {
if (letters[i] != '\0') {
newLetters[index] = letters[i];
index++;
}
}
for (int k = 0; k < newLetters.length; k++) {
for(int i=0;i<arr.length;i++){
ch = arr[i];
count = 0;
for(int j=i;j<arr.length;j++){
if(arr[i] == arr[j])
count++;
}
if (ch == newLetters[k])
System.out.println(ch + ": " + count);
}
}
}
}
我创建了临时数组,因此我可以知道char
何时已经输出,并且它不会多次显示相同的char
,但它没有帮助,输出这个程序是:
答案 0 :(得分:1)
我建议使用HashMap。
快速演示:
import java.util.HashMap;
public class Demo {
public static void main(String[] args){
char[] inputs = {'a','b','a','b','c','a'};
HashMap<Character, Integer> map = new HashMap<>();
for(Character c : inputs){
if(map.containsKey(c)){
Integer i = map.get(c);
i++;
map.put(c, i);
}
else{
map.put(c, 1);
}
}
System.out.println(map);
}
}
将输出:
{b=2, c=1, a=3}
它们的键是你的字符,数字表示它在你的数组中的频率。
答案 1 :(得分:0)
我不会给你一个完整的解决方案,但我会尽力指导你。
您可以制作HashMap<Character, Integer>
。
如果char
已经显示在地图中,请将其键增加1,否则,将其添加到地图中。
例如:
put('C', 1);
然后,假设它&#39; C&#39;再一次,你可以这样做:
put('C', get('C') + 1);
由于&#39; C&#39;的键是1,现在当你把它放在键上时,键将是2。
答案 2 :(得分:0)
你可以使用scanner.next()
来阅读这个角色char c = scan.next().charAt(0);
您可以更改以下代码
Scanner scan = new Scanner(System.in);
System.out.println("Enter size of array : ");
int n = scan.nextInt();
char[] arr = new char[n];
//Read inputs to array
for(int i = 0; i < n; i++)
{
arr[i] = scan.next().charAt(0);
}
//Main Logic
优化您的代码(主逻辑)您可以使用哈希表访问[http://docs.oracle.com/javase/7/docs/api/java/util/Hashtable.html]
答案 3 :(得分:0)
在java 8中,它是一行:
return Arrays.stream(arr).collect(Collectors.groupingBy(String::valueOf, Collectors.counting()).get(input);
答案 4 :(得分:0)
您可以通过为每个元素使用数组索引来执行此操作。这样你就不必知道输入,但假设所有输入都是小的。
public class Demo {
public static void main(String[] args){
int[] count= new int[26]; // 26 elements for 26 letters
char[] inputs = {'a','b','a','b','c','a'}; // example input
for(Character c : inputs){
count[c-'a'] ++;
// if c='b', then c-'a' returns 1, thus increments the count[1].
}
for (int i=0; i<26; i++){
// using if condition I only print the previously encountered letters
if(count[i]>0)
System.out.println((char)(i+'a')+":"+count[i]);
}
}
}
这样时间复杂度非常低(仅O(number_of_inputs))。