java 检查编号是否为唯一编号

k4ymrczo  于 2023-02-20  发布在  Java
关注(0)|答案(5)|浏览(186)

我写了一个程序来检查一个数字是否是唯一的。[唯一的数字是没有重复数字和前导零的数字。]
我写了下面的代码:

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.");

问题是IS显示任何数字都不唯一,甚至12345。我想知道我哪里出错了。

pobjuy32

pobjuy321#

i == j时,您的代码将始终找到“重复”字符。
您应该更改循环的索引,以便不将字符与其自身进行比较:

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

此外,您应该只输出“...是一个唯一的数字。”消息后,您完成了与外部循环。

ggazkfy8

ggazkfy82#

让我们假设,输入数字的长度为10,并且“i”在for循环中达到了值5。
现在“j”的值为0到9。
因此,当“j”等于5时,if条件变为true,因为您将第5位的数字与其自身进行比较(它始终为true)。

  • 如果您添加i!= j条件,它将修复该问题:-

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

  • 或者,您可以将j的循环修改为从i + 1开始,以便没有重叠。

for(int j=i+1;j<num.length();j++)
第二个选项要好得多,因为它将比较次数从(n*n)减少到(n *(n - 1))/2),其中n是输入数中的位数。

1l5u6lss

1l5u6lss3#

一个可能的解决方案是使用StreamString转换为char的Set,然后如果集合的大小与字符串的长度相同,则它是唯一的:

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);
omqzjyyz

omqzjyyz4#

您可以使用以下简短而方便的方法:

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()));
ssm49v7z

ssm49v7z5#

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");
        }
    }
}

这个代码会给予正确答案

相关问题