当我无法使用“列表”,但需要存储扫描仪的输入时,我该如何处理呢?
我想让程序计算出现在扫描仪输入中的输入频率。
例如,如果输入为
“我喜欢苹果,但我也喜欢香蕉”
结果是
我:2 喜欢:2 苹果:1 香蕉:1 但是:1 也是:1起初,我想到了制作字符串数组的方法,每次输入时,我都会将它们放入数组中。之后,尽管这将需要n ^ 2的时间复杂度,但是请为每个元素运行for循环,然后检查其是否具有相同的单词。
for (String str in arr){
for(String str_2 in arr){
if(strr.equals(str_2)){
count[i]++;
} // count is the array storing the frequencies.
但是这里的问题是...在声明arr时,我应该知道输入大小。其他人告诉我使用“ list”,但是“ list”的使用受到限制。
在这种情况下,怎么办?
答案 0 :(得分:3)
您可以使用Java streams吗?
String[] array = {"i", "like", "apple", "but", "i", "like", "banana", "too"};
或者从用户那里获取输入,例如:
Scanner sc = new Scanner(System.in);
int numberOfEntries = sc.nextInt(); // defines how big the array should be
String[] array = new String[numberOfEntries];
for (int i = 0; i < numberOfEntries; i++) {
System.out.println("Enter value " + (i+1));
String word = sc.next();
array[i] = word;
}
Arrays.stream(array).collect(Collectors.groupingBy(p -> p, Collectors.counting()))
.entrySet().stream().forEach(key -> System.out.println(key.getKey() + ": " + key.getValue()));
输出:
香蕉:1
但是:1
苹果:1
太:1
like:2
i:2
答案 1 :(得分:0)
您可以通过使用HashMap并在for循环中遍历输入数组并检查映射是否已包含键来执行类似的操作。如果包含,则只需增加值的计数即可。如果该键尚未在地图中,则只需将其与值1一起添加即可。
for (String str : inputArray) {
if (map.containsKey(str)) {
map.put(str, map.get(str) + 1);
} else {
map.put(str, 1);
}
}
最后,只需遍历地图并使用键和值对进行打印。
答案 2 :(得分:0)
String input = "I like apple but I like banana too";
String[] words = input.split(" ");
int countfre=0;
HashMap<String,Integer> map = new HashMap<String, Integer>();
for(int i=0;i<words.length;i++){
if(!map.containsKey(words[i])){
for (int j=0;j<words.length;j++){
if(words[i].equalsIgnoreCase(words[j])){
countfre++;
}
map.put(words[i],countfre);
}
countfre=0;
System.out.println(words[i] + " = " +map.get(words[i]));
}
}
//没有Java流api。 //将输出存储在Map中。
输出:
香蕉= 1
但是= 1
苹果= 1
太= 1
like = 2
i = 2
答案 3 :(得分:0)
尝试类似的东西
public static void main(String[] args) {
//input
String s = "I like apple but I like banana too";
//desired output
//I: 2 like: 2 apple: 1 banana: 1 but: 1 too: 1
String[] str = s.split(" ");
String[] result = new String[str.length];
int temp = 0;
test:
for (String str1 : str) {
for (String str2 : result) {
if(str1.equals(str2)){
continue test;
}
}
result[temp++] = str1;
int count = 0;
for (String str2 : str) {
if(str1.equals(str2)){
count++;
}
}
System.out.print(str1 + ": " + count + " ");
}