0

我已经坚持了一段时间。我应该创建一个方法,计算有多少数字看起来是相同的。例如,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
4

4 回答 4

2

解决此问题的一种方法是使用“地图”。地图将帮助您保留数字本身(称为地图的“键”)和计数(称为“价值”。查看此网页以了解如何使用地图。

于 2013-11-04T18:30:14.593 回答
0
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()));
    }
}
于 2013-11-04T18:36:59.443 回答
0

解决这个问题最直接的方法是Map从 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);
}
于 2013-11-04T18:41:09.150 回答
0

if (a == b || a == c || a == d) 我认为这应该在那里而不是 if (a == b || b == c || c == d)

于 2013-11-04T18:42:09.260 回答