我正在制作一个程序,该程序计算数组列表中元素的频率,然后打印出具有最大频率的元素。但是该程序不会打印任何内容,也不会终止。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;
public class TestClass {
static class FastReader
{
BufferedReader br;
StringTokenizer st;
public FastReader()
{
br = new BufferedReader(new
InputStreamReader(System.in));
}
String next()
{
while (st == null || !st.hasMoreElements())
{
try
{
st = new StringTokenizer(br.readLine());
}
catch (IOException e)
{
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt()
{
return Integer.parseInt(next());
}
long nextLong()
{
return Long.parseLong(next());
}
double nextDouble()
{
return Double.parseDouble(next());
}
String nextLine()
{
String str = "";
try
{
str = br.readLine();
}
catch (IOException e)
{
e.printStackTrace();
}
return str;
}
void close() {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String sfds[]) throws Exception {
FastReader s= new FastReader();
int N = s.nextInt();
ArrayList<String> comp = new ArrayList<>();
for(int i=0; i<N; i++)
comp.add(s.next());
int count = 0;
String ele="";
while(comp.size()>0){
String e = comp.get(0);
int c = Collections.frequency(comp, e);
if(c>count){
comp.removeAll(Collections.singleton(e));
count=c;
ele=e;
}
}
System.out.print(ele);
}
}
我正在删除所有已计数元素的出现。有人可以解释为什么吗?
答案 0 :(得分:0)
问题与您的代码段:
仅当频率大于当前计数值(导致while循环无限期运行)时才从列表中删除元素。即使频率不超过计数,也要删除这些元素。
while (comp.size() > 0) {
String e = comp.get(0);
int c = Collections.frequency(comp, e);
if (c > count) {
count = c;
ele = e;
}
comp.removeAll(Collections.singleton(e));
}
System.out.print(ele);
进行此微小更改后,您的代码可以正常工作。 输入:8 1 1 1 2 3 1 2 3 输出: 1