比较整数的数字

时间:2014-11-05 02:47:59

标签: java loops while-loop int nested

我试图比较两个整数的数字,以判断它们是否有不同的数字。 我的hasDistinctIntegers方法遇到问题。它并不经常评估应该是什么。如果数字没有重复数字则为真,否则为false。我相信我的其他方法工作正常,但我真的可以使用另一组眼睛!以下是我到目前为止的情况:

public static void main(String[] args) {

    System.out.println(hasDistinctDigits(12345));
}

public static boolean hasDistinctDigits(int number) {
    boolean returner = true;
    int count1 = 0;
    int digit = 0;
    int curNum = number;
    while (count1 < numDigits(number)) {
        int count2 = 0;
        digit = getDigit(curNum, count1);
        curNum = curNum / 10;
        while (count2 < numDigits(curNum)) {
            if (digit == getDigit(curNum, count2)) {
                returner = false;
            }
            count2++;
        }
        count1++;

    }

    return returner;
}

public static int numDigits(int number) {
    int count = 0;
    while (number != 0) {
        number /= 10;
        count++;
    }
    return count;
}

public static int getDigit(int number, int i) {
    int digit = 0;
    int count = 0;
    int originalNum = number;

    while (count <= i) {
        if (count == i) {
            digit = number % 10;
        }
        number /= 10;
        count++;
    }
    if (i > numDigits(originalNum)) {
        return -1;
    } else {
        return digit;
    }
}

public static int indexOf(int number, int digit) {
    int count = 0;
    int index = -1;
    while (count < numDigits(number)) {
        if (getDigit(number, count) == digit) {
            index = count;
        }
        count++;
    }
    return index;
}

提前感谢任何提示/建议!

1 个答案:

答案 0 :(得分:2)

使用Set<Integer>您可以这样编码:

public static boolean hasDistinctDigits(int number)
{
    final Set<Integer> set = new HashSet<Integer>();

    while (number > 0) {
        if (!set.add(number % 10))
            return false;
        number /= 10;
    }

    return true;
}

您也可以使用普通数组:

public static boolean hasDistinctDigits(int number)
{
    // We rely on Java's default values here:
    // uninitialized ints will be set to 0.
    final int[] digits = new int[10];
    // But for peace of mind, we can...
    Arrays.fill(digits, 0);

    int digit;

    while (number > 0) {
        digit = number % 10;
        if (digits[digit]++ > 0)
            return false;
        number /= 10;
    }

    return true;
}

请注意,上述两种方法都不会检查其参数是否大于0.


使用Java 8,您甚至可以获得更多乐趣:

public static boolean hasDistinctDigits(int number)
{
    final Set<Integer> set = new HashSet<>();
    return String.valueOf(number).chars().allMatch(set::add);
}

但在这个级别,这是智力手淫,真的......(或(Int)Stream滥用 - 你的选择)