我编写了以下程序来计算可被12整除但不包含数字重复的数字。例如。即使数字可被12整除,也不考虑数字144,因为存在数字4的重复。问题是我没有输出。我尝试将for循环的范围从12 ... 54321更改为12 ... 1000甚至12 ... 24。我仍然没有输出。我似乎无法找到问题所在。有人可以告诉我我的代码有什么问题。或者只是建议我一个更好的代码/解决问题的方法。感谢...
class mod12
{
public static void main(String[] args)
{
int count=0;
for(int num=12;num<=54321;num+=12)
{
boolean repetition=false;
int digits[]=new int[10];
int length=0;
while (num!=0)
{
digits[length++]=num%10;
num=num/10;
}
for(int i=0; i<length; i++)
{
for(int j=0; j<length; j++)
{
if(i!=j)
{
if(digits[i]==digits[j])
{
repetition=true;
break;
}
}
}
}
if(repetition==false)
{count++;}
}
System.out.println("There are "+count+" numbers satisfying the condition");
}
}
答案 0 :(得分:0)
在while循环中,减少num
,有效地向后移动for
循环,因此它永远不会完成。使用临时变量可以解决问题:
public static void main(String[] args)
{
int count=0;
for(int num=12;num<=54321;num+=12)
{
boolean repetition=false;
int digits[]=new int[10];
int length=0;
int tempNum = num; // Here
while (tempNum !=0)
{
digits[length++]=tempNum %10;
tempNum =tempNum /10;
}
for(int i=0; i<length; i++)
{
for(int j=0; j<length; j++)
{
if(i!=j)
{
if(digits[i]==digits[j])
{
repetition=true;
break;
}
}
}
}
if(repetition==false)
{count++;}
}
System.out.println("There are "+count+" numbers satisfying the condition");
}
修改:
强>
无论原始问题如何,请注意,使用Set
跟踪数字可以大大缩短代码:
public static void main(String[] args) {
int count = 0;
NUMBERS:
for (int num = 12; num <= 54321; num += 12) {
Set<Integer> digits = new HashSet<>();
int tempNum = num;
while (tempNum != 0) {
int digit = tempNum % 10;
if (!digits.add(digit)) {
continue NUMBERS;
}
tempNum = tempNum / 10;
}
++count;
}
System.out.println("There are "+count+" numbers satisfying the condition");
}