Java 使用循环查找范围内具有不同数字的数字

Java 使用循环查找范围内具有不同数字的数字,java,Java,所需行为:打印并计数1(包括)到lim(排除)之间具有不同数字的所有数字,即不相同的数字两次 具体问题:程序在无限循环中运行 这是我已经做过的。但它不起作用。我试着在每一步打印值,但它在infinte循环中不断给出1 我做错了什么 public static void main(String args[]) { Scanner sc= new Scanner(System.in); double limit=sc.nextDouble(); // reading the rang

所需行为:打印并计数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);
}
publicstaticvoidmain(字符串参数[]){
扫描仪sc=新的扫描仪(System.in);
double limit=sc.nextDouble();//读取从0到限制位数的数字范围
整数计数=0,总数=0;
int lim=(int)(Math.pow(10.0,limit));//设置范围从0到10^limit
系统输出打印LN(lim);
对于(inti=1;i0){
int tempVal=i%10;//如果每个数字是唯一的,则提取并存储在哈希集中
set.add(tempVal);
i=i/10;
计数++;
//系统输出打印项次(计数);
}
计数+=1;
if(count==set.size())
{
总计++;
}
计数=0;
}
系统输出打印项次(总计);
}

循环中的问题:

while (i > 0) {//<<------------
您必须使用:

while (i < 0) {
计数
如下:

while (count > 0) {

我相信你的问题在于你使用
I
有两个目的
i
是从1到
lim
的循环控制变量。在循环内修改
i
,则它将不再作为循环控制变量工作。它永远不会到达
lim
,因此您的
for
循环永远不会终止


相反,在决定
i
是否有不同的数字时,您需要在
i
的副本中工作,这样您就可以在不修改
i
本身的情况下进行计算。

使用调试器,您会发现它会解决寻求调试帮助的问题(“为什么此代码不工作?”)必须包括所需的行为,一个特定的问题或错误,以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建注释?您可以在代码中添加注释吗?当i=1时,i=i/10是否应该为零,因为i是整数类型?是@RohitJaiswal@RohitJaiswal是的,这是正确的,另一个解决方案是使用
while(i<0){
而不是
while(i>0)进行检查{
这将解决您的问题答案没有意义。当您继续将
i
除以10时,它将在某一点变为
0
,因此不再是
>0
而(i<0)<代码> > <代码> > <代码> > 0代码>,所以循环不会运行。mm,我认为这是更逻辑的,正确的,我真的不注意,在我的解决方案中,Ole V.V.,我认为这个答案应该是正确答案。Rohit Jaiswal,你必须接受这个答案,而不是我的答案(+ 1)你应得的答案。
while (i > 0) {
while (count > 0) {