Java 重复数字

Java 重复数字,java,if-statement,count,conditional,Java,If Statement,Count,Conditional,这件事我已经坚持了一段时间了。我应该创建一个方法,计算有多少个数字看起来是相同的。例如,7-2-2-7应该是2,4-4-5-5应该是2,而1-2-3-4应该是0。但是我的程序给了我3,当只有2个不同的数字是相同的???帮忙 public class Help { public static void main(String[] args) { numRepeat(7, 2, 2, 7); }//main public static v

这件事我已经坚持了一段时间了。我应该创建一个方法,计算有多少个数字看起来是相同的。例如,7-2-2-7应该是2,4-4-5-5应该是2,而1-2-3-4应该是0。但是我的程序给了我3,当只有2个不同的数字是相同的???帮忙

public class Help {
       public static void main(String[] args) {
          numRepeat(7, 2, 2, 7);
       }//main
       public static void numbers(int a, int b, int c, int d) {
          int rep = 0;
          int sum = 0;
             for (int i = 0; i <= 1; i++) {
                if (a == b || b == c || c == d) {
                   rep++;
                   sum += rep;
                } else if (b == a || b == c || b == d) {
                   rep++;
                   sum += rep;
                } else if (c == a || c == b || c == d) {
                   rep++;
                   sum += rep;
                } else { /**do nothing**/ }
             }//for loop
          System.out.println("The sum of repeated digits is " + sum);
       }//numRepeat
    }//class
公共类帮助{
公共静态void main(字符串[]args){
numRepeat(7,2,2,7);
}//主要
公共静态无效数字(整数a、整数b、整数c、整数d){
int rep=0;
整数和=0;

对于(int i=0;i解决此问题的一种方法是使用“映射”。映射将帮助您保留数字本身(称为映射的“键”)和计数(称为“值”)。请查看此图,了解如何使用映射。

import java.util.*;
import java.util.*;

class Test {

    public static void main(String[] args) {
        numRepeat(7, 2, 2, 7);
    }

    public static void numRepeat(int... nums) {

        Set<Integer> m = new HashSet<Integer>();
        for (int num : nums) {
            m.add(num);
        }
        System.out.println("The sum of repeated digits is " + (nums.length - m.size()));
    }
}
课堂测试{ 公共静态void main(字符串[]args){ numRepeat(7,2,2,7); } 公共静态void numRepeat(int…nums){ Set m=新的HashSet(); for(int-num:nums){ m、 添加(num); } System.out.println(“重复数字之和为”+(nums.length-m.size()); } }
解决此问题的最直接方法是将
从int映射到int

为什么是地图

  • 他们不允许重复
  • 它们允许您方便地检索有关集合中特定数字的信息
要遵循的示例代码。我假设您的信息来自
numRepeat
,它采用int-varargs参数

Map<Integer, Integer> seenValues = new HashMap<>();

for(int val : parsedResults) {
    if(seenValues.containsKey(val)) {
        seenValues.put(val, seenValues.get(val) + 1);
    } else {
        seenValues.put(val, 1);
}
Map seenValues=newhashmap();
for(int val:parsedResults){
如果(参见值。容器(val)){
seenValues.put(val,seenValues.get(val)+1);
}否则{
参见值。put(val,1);
}
如果(a==b | | a==c | | a==d) 我认为这应该在那里,而不是
如果(a==b | | b==c | | c==d)

为什么循环需要
?为什么
7-2-2-2
4-4-5-5
都是2?每个样本集中有两个相同的数字。
==
是可交换的。操作数的放置顺序是无关的;
a==b
b==a
相同。对不起,我真的很累ed.4-4-5-5将是2.numRepeat(7,2,2,7);但没有函数numRepeat.:)你应该改用
java.util.Set
。@MartijnCourteaux:为什么是一个集合?除了非重复列表之外,这会给你带来什么好处?这不会告诉你之前列表中有哪些重复项。是的,你是对的。之前的评论员提到了map,所以我使用了map:)@Makoto“这不会告诉你之前列表中有哪些重复项”这不是required@Makoto:因为重复的数量可以与数字总数和唯一数字的数量相关联:
#dup=#total-#unique