Java 如何生成限制相似数和十次幂的随机数

Java 如何生成限制相似数和十次幂的随机数,java,math,Java,Math,注:此功能也应适用于其他数字范围(例如,范围为101-999的3位数字范围和范围为1001-9999的4位数字范围) 我们很难识别类似的数字(例如11、22、33、44、55、66、77、88、99、111、222、333、3333……) 编辑1: We need to generate random numbers within a certain digit range with few restrictions e.g. For double digit range 11 - 99, t

注:此功能也应适用于其他数字范围(例如,范围为101-999的3位数字范围和范围为1001-9999的4位数字范围)


我们很难识别类似的数字(例如11、22、33、44、55、66、77、88、99、111、222、333、3333……)

编辑1:

We need to generate random numbers within a certain digit range with few restrictions 
e.g. For double digit range 11 - 99, the resultant output should not include all like numbers [11,22,33,44,...99] and multiples of 10 [20,30,40....90]

The resultant output should be [12,13,14,15,16,17,18,19,21,23,...98]
受保护的静态列表fetchRandInteger(int-min、int-max、int-howMany、布尔随机){
//我们需要反转负范围的最小值和最大值
如果(最小值>最大值){
int tmp=min;
最小值=最大值;
max=tmp;
}
List allNumbers=new ArrayList();
对于(int i=min;i两个简单选项:

  • 生成该范围内的任意随机数,如果选择了“禁止”的随机数,请再次执行此操作
  • 计算出您实际拥有的符合条件的数字数量,生成一个范围为[0..size]的数字,然后将其映射到符合条件的数字上
后者可能更高效(您不需要循环生成然后丢弃的数字),但实现起来更复杂

编辑:这里有一种检查整数中所有数字是否相同的方法:

protected static List<Integer> fetchRandIntegers(int min, int max, int howMany, boolean randomize) {

    // We need to reverse minimum, maximum values for negative ranges
    if (min > max) {
        int tmp = min;
        min = max;
        max = tmp;
    }

    List<Integer> allNumbers = new ArrayList<Integer>();
    for (int i = min; i <= max; i++) {
        allNumbers.add(i);
    }

    if (randomize) {
    ...
    }

    return allNumbers;

(可能有一种更优雅的方法来编写循环,但我还没有喝咖啡……模11或111或1111等方法也非常简洁。)

您愿意使用多大的查找表?(将连续范围映射到没有禁止值的较大范围。)


或者进行检查(如果小于100,则为10和11的倍数,如果小于1000,则为111和100的倍数,依此类推),如果鱼太小,则将其扔回?

以确定integer
i
的所有数字是否相同:

protected static List<Integer> fetchRandIntegers(int min, int max, int howMany, boolean randomize) {

    // We need to reverse minimum, maximum values for negative ranges
    if (min > max) {
        int tmp = min;
        min = max;
        max = tmp;
    }

    List<Integer> allNumbers = new ArrayList<Integer>();
    for (int i = min; i <= max; i++) {
        allNumbers.add(i);
    }

    if (randomize) {
    ...
    }

    return allNumbers;
  • i
    转换为
    string
    并比较字符,或
  • 重复模和除10,检查所有模是否相同
比如:

public boolean checkForAllOneDigit(int value)
{
    int digit = value % 10;
    value = value / 10;
    while (value > 0)
    {
        if (value % 10 != digit)
        {
            return false;
        }
        value = value / 10;
    }
    return true;
}

要确定整数
i
是否是
10
(1001000)的倍数,请执行以下操作:

  • 检查
    i模10
    是否为
    0

此程序也将给出答案

public boolean hasAllDigitsSame (int i)
{
    int a = i ;
    int m = a % 10 ;
    int mm = m ;
    while(a > 0)
    {
        m = a % 10;
        if (m != mm)
          return False ;
        a /= 10 ;
    }
    return True ;
 }
import java.util.*;
公共类生成{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
System.out.println(“\n输入限制:”);
int k=scan.nextInt();
int i,j,w,l,q,d;

对于(i=13;我实际上是从这个随机生成的列表中创建数字的子集,这是我们的一项要求。我们在识别类似的数字(例如11、22、111、3333…)时遇到困难。否则我们就没事了。@Joe:不清楚你的第一条评论是什么意思。至于用相同的数字来识别数字,你可以取
值%10
,然后反复除以10,取
值%10
,直到你看完所有的数字为止(格式为1111、2222等)或者你得到一个不同的余数(在这种情况下没关系)。有关一些示例代码,请参见我的编辑。我要排除的是10的任意倍数以及类似的数字,而这与范围无关。是否有更简单的机制来查找整数是否具有类似的数字?您可以创建带有循环的数字的“一”版本,然后查看以“一”为模的数字是否为零。如果是,则该数字无效。例如,
34%11=1
,所以34不是一个重复的数字。
555%111=0
,所以555是一个重复的数字。@101100:这确实很聪明。听起来这个人有着同样的作业@Peter-我来这里是为了解决我在编码过程中遇到的真正问题。看到一些疯狂的评论,w,真的很恼火这与问题无关。我想我只是在浪费时间试图解释。如果你真的读了这篇文章,你会发现同一个问题有很多答案。我发现人们不愿意读那些试图帮助他们的人的答案是疯狂的。顺便说一句,我发现有人会发布一篇文章,这是一个惊人的巧合在一个小时内对这样一个独特的问题进行评估。无论如何,我今天已经给出了一次答案,它涵盖了您的全部需求,而不仅仅是其中的一部分,而且不使用循环,因此速度可能会更快。@peter可能与此相关,但很难说,因为其中一个是按照“帮助我用Gotos把这个疯狂的C++代码翻译成java”,这是关于随机数的生成。@杰夫,但是数字的顺序完全一样。