Java 如何避免重复相同的数字?
这就是我想要的:Java 如何避免重复相同的数字?,java,arrays,function,for-loop,Java,Arrays,Function,For Loop,这就是我想要的: 允许用户输入任意数量的数字,直到输入非数字(您可以 假设少于100个数字)。查找最常输入的号码。(如果 有多个,请全部打印。) 示例输出: 输入:5 输入:4 输入:9 输入:9 输入:4 输入:1 输入:a 最常见的:4,9 我已经在代码中找到了最常见的数字。然而,我不想一次又一次地打印相同的数字;上面的示例:最常见的:4,9,9,4 需要做什么 public static void main(String[] args) throws IOException { B
允许用户输入任意数量的数字,直到输入非数字(您可以 假设少于100个数字)。查找最常输入的号码。(如果 有多个,请全部打印。)
示例输出:
输入:5
输入:4
输入:9
输入:9
输入:4
输入:1
输入:a
最常见的:4,9
我已经在代码中找到了最常见的数字。然而,我不想一次又一次地打印相同的数字;上面的示例:最常见的:4,9,9,4
需要做什么
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String[] input = new String[100];
System.out.print("Input: ");
input[0] = in.readLine();
int size = 0;
for (int i = 1; i < 100 && isNumeric(input[i-1]); i++) {
System.out.print("Input: ");
input[i] = in.readLine();
size = size + 1;
}
/*for (int i = 0; i < size; i++) { //testing
System.out.println(input[i]);
}*/
int numOccur;
int[] occur = new int[size];
for(int i = 0; i < size; i++) {
numOccur = 0;
for (int j = 0; j < size; j++) {
if(input[i].equals(input[j])) {
numOccur = numOccur + 1;
}
}
occur[i] = numOccur;
//System.out.println(numOccur); //testing
}
int maxOccur = 0;
for(int i = 0; i < size; i++) {
if(occur[i] > maxOccur) {
maxOccur = occur[i];
}
}
//System.out.println(maxOccur); //testing
for (int i = 0; i < size && !numFound; i++) {
if(occur[i] == maxOccur) {
System.out.println(input[i]);
}
}
}
//checks if s is an in, true if it is an int
public static boolean isNumeric (String s) {
try {
Integer.parseInt(s);
return true; //parse was successful
} catch (NumberFormatException nfe) {
return false;
}
}
publicstaticvoidmain(字符串[]args)引发IOException{
BufferedReader in=新的BufferedReader(新的InputStreamReader(System.in));
字符串[]输入=新字符串[100];
系统输出打印(“输入:”);
输入[0]=in.readLine();
int size=0;
对于(inti=1;i<100&&isNumeric(输入[i-1]);i++){
系统输出打印(“输入:”);
输入[i]=in.readLine();
尺寸=尺寸+1;
}
/*对于(inti=0;i最大发生){
最大发生=发生[i];
}
}
//System.out.println(maxOccurse);//测试
对于(int i=0;i
找到了解决办法
String[] mostCommon = new String[size];
int numMostCommon = 0;
boolean numFound = false;
for (int i = 0; i < size; i++) {
int isDifferent = 0;
if (occur[i] == maxOccur) {
for (int j = 0; j < size; j++) {
if (!(input[i].equals(mostCommon[j]))) {
isDifferent = isDifferent + 1;
}
}
if (isDifferent == size) {
mostCommon[numMostCommon] = input[i];
numMostCommon = numMostCommon + 1;
}
}
}
for (int i = 0; i < numMostCommon - 1; i++) {
System.out.print("Most common: " + mostCommon[i] + ", ");
}
System.out.println(mostCommon[numMostCommon - 1]);
String[]mostCommon=新字符串[size];
int nummostcomon=0;
布尔numFound=false;
对于(int i=0;i
您可以使用并存储已打印的值。Set uniquemaxoccurrent=new HashSet();
Set<Integer> uniqueMaxOccur = new HashSet<Integer>();
for (int i = 0; i < size ; i++) {
if(occur[i] == maxOccur) {
//System.out.println(input[i]);
uniqueMaxOccur.add(input[i]);
}
}
对于(int i=0;i并显示集合中的值您可以使用哈希表来存储频率,因为限制非常小,即小于100。 伪代码如下:
向量散列(101)
cin>>输入
if(isnumeric(input))
hash[input]+
else{
max=max\u元素(hash.begin(),hash.end());
for(inti=0;i这样的东西怎么样
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
Map<string,int> numberLookup = new HashMap<string,int>();
Boolean doContinue = true;
while (doContinue)
{
System.out.print("Input: ");
String input = in.readLine();
if (isNumeric(input))
{
if (!numberLookup.containsKey(input))
numberLookup.put(input,1);
else
numberLookup.put(input, numberLookup.get(input) + 1);
}
else
doContinue = false;
}
maxOccur = numberLookup.values().max();
System.out.print("These numbers were all entered " + maxOccur + " times:");
Iterator it = numberLookup.entrySet().iterator();
while (it.hasNext())
{
(Map.Entry)it.next();
System.out.println(pairs.getKey());
}
}
publicstaticvoidmain(字符串[]args)引发IOException{
BufferedReader in=新的BufferedReader(新的InputStreamReader(System.in));
Map numberLookup=newhashmap();
布尔值doContinue=true;
while(doContinue)
{
系统输出打印(“输入:”);
字符串输入=in.readLine();
如果(是数字(输入))
{
如果(!numberLookup.containsKey(输入))
数字lookup.put(输入,1);
其他的
numberLookup.put(输入,numberLookup.get(输入)+1);
}
其他的
doContinue=false;
}
MaxOccurse=numberLookup.values().max();
System.out.print(“这些数字都输入了”+MaxOccurse+“次:”);
迭代器it=numberLookup.entrySet().Iterator();
while(it.hasNext())
{
(Map.Entry)it.next();
System.out.println(pairs.getKey());
}
}
很抱歉,我是C#人,身上没有Java编译器,所以这可能需要一些调整。请解释一下,我不熟悉使用集合。此外,还有其他方法吗?从逻辑上讲,最好使用集合,您可以找到集合教程。提示您必须使用迭代器。不建议使用集合进行工作,我可以这样做n想想看,您必须将打印的每个数字存储在一个大小为size/maxOccurse
的数组中,并将数字添加到此数组中。在打印之前,您必须检查所有项目的重复性。但我再次建议您使用set。是的,对不起,忘记添加标记了。我只学习了函数、数组和for&while循环