有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

共 (2) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

    循环中的问题:

    while (i > 0) {//<<      
    

    要解决你的问题,你需要按照条件的相反顺序,而不是:

    while (i > 0) {
    

    你必须使用:

    while (i < 0) {
    

    或者替换循环中的i也是合乎逻辑的:

    while (i > 0) {
    

    像这样的count

    while (count > 0) {