我需要生成一个随机的3位数,其中第一位数和第三位数相差不止一位.我将如何尽可能简单地完成这without arrays个目标呢?我还是个初学者.

int num = 0;

int firstDigit = 0;
int lastDigit = 0;

// complete the method

//while loop
while(firstDigit-lastDigit<1)
{
    num = (int)(Math.random() * (999-100) + 100);
    String number = String.valueOf(num);
    String n1 = number.substring(0,1);
    String n2 = number.substring(2,3);
    int a = Integer.parseInt(n1);
    int b = Integer.parseInt(n2);
    
    firstDigit = a;
    lastDigit = b;
    int randNum = Math.abs(a-b);
    System.out.println(a);
    System.out.println(b);   
}

我最初try 这样做,但很快就意识到While循环只是始终处于活动状态,因为它从方法中早先定义的初始值中获取初始值.

推荐答案

使用循环(或无限流)来得到结果的问题是,您的执行时间变得不可预测,而且,从theoretically的Angular 讲,您的函数可能无限运行.

这里有一个简单的方法,它在第一次try 时在您的约束内生成一个随机的(*)数字:

import java.util.Random;

public class MyClass {
    public static void main(String args[]) {
      Random random = new Random();
        
      int first = random.nextInt(1, 10);
      int middle = random.nextInt(0, 10);
      int last = (first + random.nextInt(2, 9)) % 10;
      int result = first * 100 + middle * 10 + last;
      
      System.out.println(result);
    }
}

这个解决方案依赖于这样一个事实,即对于最后一个数字,只有7个可能的值可供 Select .它生成一个2到8之间的随机值,将其添加到第一位数字,然后使用模运算将其还原为个位数.


(*)2)您的最后一个数字将偏向901值,即16.66%.更有可能发生的原因是从第一位数中排除了0值.其他解决方案将显示相同的偏差.

Java相关问答推荐

如何让TaskView总是添加特定的列来进行排序?

将Nimbus设置为计算机上运行的所有Java应用程序的默认外观

CriteriaQuery with max

如何在返回bigint []值的子查询中使用any?

当Volatile关键字真的是必要的时候?

如何使用带有谓词参数的方法,而不使用lambda表达式

如何在Spring Java中从数据库列中获取JSON中的具体数据

基于接口的投影、原生查询和枚举

S,要对Java复制构造函数深度克隆所有属性进行单元测试,最可靠的方法是什么?

如何在antlr4中跳过所有反斜杠-换行符而保留换行符?

SpringBoot:在条件{Variable}.isBlank/{Variable}.isEmpty不起作用的情况下进行路径变量验证

在macOS上读取文件会导致FileNotFound,即使文件存在(并且具有权限)

如何从HttpResponse实例获取Entity对象的内容?

为什么相同的数据条码在视觉上看起来不同?

Java集合:NPE,即使没有添加空值

为什么项目名称出现在我的GET请求中?

如何使用Java ZoneID的区域设置?

[jdk21][Foreign Function&;Memory API]MemoryLayout::varHandle通过可变数组进行 struct 化的问题

声纳覆盖范围为 0%,未生成 jacoco.xml

Swagger.io OpenApi v3.0 声明默认媒体类型