我写了一个程序来检查一个数字是否是唯一的。[唯一的数字是没有重复数字和前导零的数字。]
我写了下面的代码:
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。我想知道我哪里出错了。
5条答案
按热度按时间pobjuy321#
当
i == j
时,您的代码将始终找到“重复”字符。您应该更改循环的索引,以便不将字符与其自身进行比较:
此外,您应该只输出“...是一个唯一的数字。”消息后,您完成了与外部循环。
ggazkfy82#
让我们假设,输入数字的长度为10,并且“i”在for循环中达到了值5。
现在“j”的值为0到9。
因此,当“j”等于5时,if条件变为true,因为您将第5位的数字与其自身进行比较(它始终为true)。
if(num.charAt(i)==num.charAt(j) and i != j)
for(int j=i+1;j<num.length();j++)
第二个选项要好得多,因为它将比较次数从(n*n)减少到(n *(n - 1))/2),其中n是输入数中的位数。
1l5u6lss3#
一个可能的解决方案是使用
Stream
将String
转换为char的Set
,然后如果集合的大小与字符串的长度相同,则它是唯一的:omqzjyyz4#
您可以使用以下简短而方便的方法:
ssm49v7z5#
这个代码会给予正确答案