java使用循环查找范围内具有不同数字的数字
所需的行为:打印并计数1(包括)和lim
(排除)之间具有不同数字的所有数字,即不相同的数字两次
具体问题:程序在无限循环中运行
这是我已经做过的。但它不起作用。我试着在每一步打印值,但它在infinte循环中不断给出1
我做错了什么
public static void main(String args[]) {
Scanner sc= new Scanner(System.in);
double limit=sc.nextDouble(); // reading the range of numbers from 0 to limit-digit number
int count=0,total=0;
int lim=(int)(Math.pow(10.0,limit)); //setting range from 0 to 10^limit
System.out.println(lim);
for(int i=1;i<lim;i++) {
Set<Integer> set = new HashSet<Integer>(); //making a hash set to include the unique elements
System.out.println(i);
while (i > 0) {
int tempVal = i % 10; //each digit is extracted and stored in hash set if unique
set.add(tempVal);
i = i / 10;
count++;
//System.out.println(count);
}
count+=1;
if(count==set.size())
{
total++;
}
count=0;
}
System.out.println(total);
}
# 1 楼答案
我相信你的问题在于你使用
i
有两个目的i
是从1到lim
的循环控制变量。在循环中修改i
,那么它将不再作为循环控制变量工作。它永远不会到达lim
,因此for
循环永远不会终止相反,在决定
i
是否有不同的数字时,需要在i
的副本中工作,这样就可以在不修改i
本身的情况下进行计算# 2 楼答案
循环中的问题:
要解决你的问题,你需要按照条件的相反顺序,而不是:
你必须使用:
或者替换循环中的
i
也是合乎逻辑的:像这样的
count