当前位置: 首页 > 知识库问答 >
问题:

我试图生成一个随机的3或4位数字

方弘
2023-03-14

我试图在Java中生成一个随机的3位或4位数字,而不使用循环、数组或方法(生成随机数的内置数学随机方法除外),只是一些基本的东西,比如if语句。

我试过了

(int)(Math.random()*9899100);

但它只返回4位数的模糊数字。我的意思是,任何数字都不应该重复。像232、7277、889、191这样的数字是不允许的。但像1234、3456、8976、435这样的数字是不同的,是允许的

共有1个答案

衡子安
2023-03-14

下面的代码不会公平地生成数字,但可以生成任何4位数字,3位数字中不会包含0。

// first digit between 0 and 9, if it's 0 we will have a 3 digit number
int first = (int)(Math.random() * 10);  

int second = (int)(Math.random() * 10);
// if it's the same as the first add one to it, use modulo to wrap around
if (first == second)
    second = (second + 1) % 10;

// the same as with second digit just with more checks
int third = (int)(Math.random() * 10);
if (third == first || third == second)
    third = (third + 1) % 10;
// if it's still the same, add one once more, after doing it a second time new digit is guaranteed 
if (third == first || third == second)
    third = (third + 1) % 10;

// the same as with second digit just with more checks
int fourth = (int)(Math.random() * 10);
if (fourth == first || fourth == second || fourth == third)
    fourth = (fourth + 1) % 10;
if (fourth == first || fourth == second || fourth == third)
    fourth = (fourth + 1) % 10;
if (fourth == first || fourth == second || fourth == third)
    fourth = (fourth + 1) % 10;

System.out.println(1000 * first + 100 * second + 10 * third + fourth);

您可以将新数字添加到自身,而不是添加一个以获得更均匀的分布,这需要处理一些角落情况。

 类似资料:
  • 问题内容: 我需要一点帮助。 我将使用什么代码来创建一个5位数长,以1或2开头的随机数? 为了用作公司员工ID? 问题答案: 根据您处理问题的方式,类似以下内容: 或类似的东西(您可能想要实例化该方法的 Random 对象,但是为了简单起见,我将其放在此处): 这个想法是 1 + nextInt(2) 总是给出1或2。然后将其乘以10000以满足您的要求,然后在[0..9999]之间添加一个数字。

  • 我需要1、2、3和4中的两个随机数,但它们不能相同,我需要它们在两个不同的变量中。 比如

  • 本文向大家介绍如何生成一个随机数?相关面试题,主要包含被问及如何生成一个随机数?时的应答技巧和注意事项,需要的朋友参考一下  

  • 问题内容: 我正在开发一个需要生成一些唯一编号的应用程序,并且实际上没有预定义的限制,因此使用Java UUD生成器并且运行良好。现在,我们对生成12位唯一的随机数有了新的要求。 谁能指出我实现这一目标的一些好的方法/算法,因为我看不到UUID生成数字中的任何可能性。 提前致谢 问题答案: 通过调用生成每个数字。为了保持唯一性,您可以通过将随机数保存在集合中并检查集合中是否包含您每次生成的数字来跟

  • 本文向大家介绍写一个方法随机生成指定位数的字符串相关面试题,主要包含被问及写一个方法随机生成指定位数的字符串时的应答技巧和注意事项,需要的朋友参考一下 function getStringBylength(nlength) { var str = ""; var arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', '

  • 问题内容: 我正在尝试使用下面的代码来生成10位唯一的随机数。根据我的要求,我必须创建大约5000个唯一编号。这无法正常工作。它还会生成- ve数字。同样,有时生成的数字中缺少一两位数字,导致8或9个数字而不是10。 问题答案: 我认为您获得8/9位数字值和负数的原因是您要添加一个(带符号的64位值),该值可能大于的正数范围(32位值)。 该值正在溢出,处于负32位范围内或几乎缠绕到(由于是带符号