user11745382
user11745382

Reputation:

Checking whether a number is an Unique number or not

I have written a program to check if a number is an Unique number. [A Unique number is a number with no repeating digits and no leading zeros.]

I have written the following code:

    Scanner sc=new Scanner(System.in)

    System.out.println("Enter the number to be checked: ");
    String num=sc.nextLine();

    if(num.charAt(0)!='0')
    {   
        Outer:
        for(int i=0;i<num.length();i++)
        {
            for(int j=0;j<num.length();j++)
            {
                if(num.charAt(i)==num.charAt(j))
                {
                    System.out.println("No, "+num+" is not a Unique number.");
                    break Outer;
                }
            }
            if(i==num.length()-1)
            {
                System.out.println("Yes, "+num+" is a Unique number.");
            }
        }
    }
    else
        System.out.println("No, "+num+" is not a Unique number as it has leading zeros.");

The problem is that is shows any number as NOT Unique, even 12345. I would like to know where I have gone wrong.

Upvotes: 2

Views: 950

Answers (5)

Sarth Sarode
Sarth Sarode

Reputation: 1

import java.util.*;

public class spnum
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter a number: ");
        String num = sc.next();
        int ctr = 0;
        boolean isNumUnique = true;
        for(int i = 0; i < num.length(); i++)
        {
            for(int j = 0; j < num.length(); j++)
            {
                if(num.charAt(i) == num.charAt(j))
                {
                    ctr++;
                }
            }
            if(ctr > 1)
            {
                isNumUnique = false;
            }
            ctr = 0;
        }

        if(isNumUnique == true)
        {
            System.out.println("Number is a unique number");
        }
        else
        {
            System.out.println("Number is not a unique number");
        }
    }
}

this code would give the right answer

Upvotes: 0

Shubhendu Pramanik
Shubhendu Pramanik

Reputation: 2751

You can use below short and handy approach:

    String a = "123452";

    String[] split = a.split("");
    List<String> list = Arrays.asList(a.split(""));
    Set<String> set = new HashSet<>(list);

    System.out.println("Unique: " + (list.size() == set.size()));

Upvotes: 0

thibsc
thibsc

Reputation: 4059

A possible solution is to use Stream to convert your String in a Set of char, then if the size of the set is the same as the length of your string, it is unique:

Scanner sc = new Scanner(System.in);
System.out.println("Enter the number to be checked: ");
String num = sc.nextLine();

boolean unique = Stream.of(num.split(""))
    .map(s -> new String(s))
    .collect(Collectors.toSet()).size() == num.length();
// With "1234" -> print true
// With "12342" -> print false
System.out.println(unique);

Upvotes: 1

Akash jain
Akash jain

Reputation: 199

Lets assume , length of input number to be 10 and "i" has reached the value of 5 in the for loop.

Now "j" will have the values 0 to 9.

So when "j" is equal to 5 , the if condition becomes true as you are comparing the digit at 5th position with itself (which is always true).

  • If you add i != j condition , it will fix the issue :-

if(num.charAt(i)==num.charAt(j) and i != j)

  • Alternatively, you can modify the loop for j to start from i + 1 so that there are no overlaps.

for(int j=i+1;j<num.length();j++)

The second option is much better as it will reduce the number of comparisons from (n*n) to (n * (n - 1))/2) , where n is the number of digits in the input number.

Upvotes: 1

Eran
Eran

Reputation: 393956

Your code will always find "duplicate" characters when i == j.

You should change the indices of the loop in order not to compare a character to itself:

for(int i=0;i<num.length();i++) {
    for(int j=i+1;j<num.length();j++) {
        if(num.charAt(i)==num.charAt(j))
            ...

Besides, you should only output the "...is a Unique number." message after you are done with the outer loop.

Upvotes: 1

Related Questions