Amanda Merical
Amanda Merical

Reputation: 23

Checking to see if an integer has distinct numbers java

I'm having a difficult time with my program! For this method I have to check to see if all the numbers are distinct and I can't figure out for the life of me what I am doing wrong. I don't know if using an array is the best way to go. I must call the getDigit method.

for (int i = 0; i <= numDigits(number); i++) {
    int digit = getDigit(number,i);
    if (digit == getDigit(number,i)) {
        return false;
    }
}
return true;

Upvotes: 0

Views: 5623

Answers (4)

TheLostMind
TheLostMind

Reputation: 36304

You can first get each digit from the number and add them to a HashSet, then compare the size of HashSet with the number of digits present in the number

You can try this code:

public static void main(String[] args) {
    int val = 123554;
    Set<Integer> set = new HashSet<Integer>(); // HashSet contains only unique elements
    int count = 0;       // keeps track of number of digits encountered in the number
  // code to get each digit from the number
    while (val > 0) {                           
        int tempVal = val % 10;
        set.add(tempVal);         // add each digit to the hash set
// you can have a boolean check like if(!set.add(tempVal)) return false; because add() returns false if the element is already present in the set.
        val = val / 10;
        count++;
    }

    if (count == set.size()) {
        System.out.println("duplicate digit not present");
    } else {
        System.out.println("duplicate digit present");
    }
}

Upvotes: 1

Ivan T
Ivan T

Reputation: 71

public boolean unique(int theNumber) {
    String number = new Integer(theNumber).toString();
    Set<Character> set = new LinkedHashSet<Character>();
    for(char c:number.toCharArray()) {
        set.add(Character.valueOf(c));
    }
    return number.length() == set.size();

}

Upvotes: 0

G0rd0l0D3v
G0rd0l0D3v

Reputation: 1

i suppose that you want to compare for example the number 12345 with 23145, and prompt out a false, and if they are the same (digit by digit, prompt a true) , am i right?. If you want to do this, you should make 2 arrays and you have to make sure to compare each position of both so you can compare digit by digit.

Hope it helps you

Upvotes: 0

jbutler483
jbutler483

Reputation: 24559

Splitting Int into single digits:

Use something similar to this:

Code to print the numbers in the correct order:

int number; // = and int
LinkedList<Integer> stack = new LinkedList<Integer>();
while (number > 0) {
    stack.push( number % 10 );
    number = number / 10;
}

while (!stack.isEmpty()) {
    print(stack.pop());
}

Source

Checking for Duplicates:

Again, something similar to this:

public static boolean duplicates (int [] x, int numElementsInX ) {
    Set<Integer> set = new HashSet<Integer>();
    for ( int i = 0; i < numElementsInX; ++i ) {
        if ( set.contains( x[i])) {
            return true;
        }
        else {
            set.add(x[i]);
        }
    }
    return false;
}

Source


Alternative

If you can split the array, an alternative could be to use:

int[] numbers = { 1, 5, 23, 2, 1, 6, 3, 1, 8, 12, 3 };
Arrays.sort(numbers);

for(int i = 1; i < numbers.length; i++) {
    if(numbers[i] == numbers[i - 1]) {
        System.out.println("Duplicate: " + numbers[i]);
    }
}

Upvotes: 0

Related Questions