如何在回溯器(java)中实现这一点?

如何在回溯器(java)中实现这一点?,java,list,caching,random,Java,List,Caching,Random,我制作了一个小java程序。一个整数将是一个输入,然后随机数将被打印到控制台,直到我们找到那个整数输入。 代码会有点作弊,因为它知道输入的数字有多少位 将使用随机数,我要做的是排除所有已使用的随机数。但我不知道该怎么做。嗯,我有一个想法,但这将是一个廉价的旁路,我不喜欢。它将从0开始,一直增加1,直到我们找到输入 这个(排除使用过的随机数)可以在java中完成吗 import java.util.Scanner; import java.util.Random; public class Ba

我制作了一个小java程序。一个整数将是一个输入,然后随机数将被打印到控制台,直到我们找到那个整数输入。 代码会有点作弊,因为它知道输入的数字有多少位

将使用随机数,我要做的是排除所有已使用的随机数。但我不知道该怎么做。嗯,我有一个想法,但这将是一个廉价的旁路,我不喜欢。它将从0开始,一直增加1,直到我们找到输入

这个(排除使用过的随机数)可以在java中完成吗

import java.util.Scanner;
import java.util.Random;

public class Backtracker{
    public static void main(String[]args){
        int counter = 0;
        Scanner input = new Scanner(System.in);
        System.out.println("Enter integer here: ");
        int x = input.nextInt();
        Random rand = new Random();
        int a = rand.nextInt(100)+0;
        int b = rand.nextInt(1000)+100;
        int c = rand.nextInt(10000)+1000;
        int d = rand.nextInt(100000)+10000;
        int e = rand.nextInt(1000000)+10000;
        int f = rand.nextInt(10000000)+1000000;
        int g = rand.nextInt(100000000)+10000000;

        if(x<=100){
            while(x != a){
                a = rand.nextInt(100)+0;
                System.out.println(a);
                counter++;
            }
            System.out.println("Tries: "+counter);
        }

        else if(x<=1000){
            while(x != b){
                b = rand.nextInt(1000)+100;
                System.out.println(b);
                counter++;
            }
            System.out.println("Tries: "+counter);
        }

        else if(x<=10000){
            while(x != c){
                c = rand.nextInt(10000)+1000;
                System.out.println(c);
                counter++;
            }
            System.out.println("Tries: "+counter);
        }

        else if(x<=100000){
            while(x != d){
                d = rand.nextInt(100000)+10000;
                System.out.println(d);
                counter++;
            }
            System.out.println("Tries: "+counter);
        }

        else if(x<=1000000){
            while(x != e){
                e = rand.nextInt(1000000)+100000;
                System.out.println(e);
                counter++;
            }
            System.out.println("Tries: "+counter);
        }

        else if(x<=10000000){
            while(x != f){
                f = rand.nextInt(10000000)+1000000;
                System.out.println(f);
                counter++;
            }
            System.out.println("Tries: "+counter);
        }

        else if(x<=100000000){
            while(x != g){
                g = rand.nextInt(100000000)+10000000;
                System.out.println(g);
                counter++;
            }
            System.out.println("Tries: "+counter);
        }
    }
}
我想我们可以做一个列表,这样每个使用过的号码都会在这个列表中。在每个循环中,访问列表以检查编号是否未使用。但这只是想象,在java中真的有可能吗

import java.util.Scanner;
import java.util.Random;

public class Backtracker{
    public static void main(String[]args){
        int counter = 0;
        Scanner input = new Scanner(System.in);
        System.out.println("Enter integer here: ");
        int x = input.nextInt();
        Random rand = new Random();
        int a = rand.nextInt(100)+0;
        int b = rand.nextInt(1000)+100;
        int c = rand.nextInt(10000)+1000;
        int d = rand.nextInt(100000)+10000;
        int e = rand.nextInt(1000000)+10000;
        int f = rand.nextInt(10000000)+1000000;
        int g = rand.nextInt(100000000)+10000000;

        if(x<=100){
            while(x != a){
                a = rand.nextInt(100)+0;
                System.out.println(a);
                counter++;
            }
            System.out.println("Tries: "+counter);
        }

        else if(x<=1000){
            while(x != b){
                b = rand.nextInt(1000)+100;
                System.out.println(b);
                counter++;
            }
            System.out.println("Tries: "+counter);
        }

        else if(x<=10000){
            while(x != c){
                c = rand.nextInt(10000)+1000;
                System.out.println(c);
                counter++;
            }
            System.out.println("Tries: "+counter);
        }

        else if(x<=100000){
            while(x != d){
                d = rand.nextInt(100000)+10000;
                System.out.println(d);
                counter++;
            }
            System.out.println("Tries: "+counter);
        }

        else if(x<=1000000){
            while(x != e){
                e = rand.nextInt(1000000)+100000;
                System.out.println(e);
                counter++;
            }
            System.out.println("Tries: "+counter);
        }

        else if(x<=10000000){
            while(x != f){
                f = rand.nextInt(10000000)+1000000;
                System.out.println(f);
                counter++;
            }
            System.out.println("Tries: "+counter);
        }

        else if(x<=100000000){
            while(x != g){
                g = rand.nextInt(100000000)+10000000;
                System.out.println(g);
                counter++;
            }
            System.out.println("Tries: "+counter);
        }
    }
}
import java.util.Scanner;
导入java.util.Random;
公共类回溯程序{
公共静态void main(字符串[]args){
int计数器=0;
扫描仪输入=新扫描仪(System.in);
System.out.println(“在此处输入整数:”);
int x=input.nextInt();
Random rand=新的Random();
INTA=兰特·耐克斯汀(100)+0;
int b=兰特(1000)+100;
int c=兰特(10000)+1000;
int d=兰特(100000)+10000;
int e=100万兰特+10000兰特;
int f=兰特nextInt(10000000)+1000000;
int g=兰特nextInt(100000000)+10000000;

如果(x使用随机数听起来不是一个好的解决方案,也不是从1开始计数。 一个足够简单的好解决方案可以是:

a) 给定输入n必须为0的约束 b) 使用basic


因为这听起来像是一个任务,所以我不会为这个解决方案编写代码。

你必须以某种方式保存状态-例如,你已经使用了哪些数字。只需创建一个
集,然后将你的数字保存在那里。将x与某种数字进行比较,它确实像作弊,整数有一个范围,立即使用该范围,而不是但这不是一个作业:P我很久以前也问过这个问题(不同的问题,但实际上是相同的代码)。只想知道如何避免使用相同的数字。如果我知道,我会问如何改进它,以便更快地找到数字。如果我不了解自己,我会来这里问。但再次说,这不是家庭作业。好的,二进制搜索会做这项工作,也会改进算法。如果你对代码有困难,我们可以提供帮助。当你满意的时候,请接受这个答案。