生成有限制的随机数

Rac*_*ket 4 java random math

我是一般的编程新手,所以我试图在这个问题上尽可能具体.这本书我正在做一些练习.我设法做了他们所说的一半以上,但这只是我一直在努力寻找的一个输入.

我会写问题然后我的代码,

"编写一个创建并打印XXX-XXX-XXXX表格的随机电话号码的应用程序.在输出中包含破折号.不要让前三个数字包含8或9(但不要比那个更严格) ),并确保第二组三位数不大于742. 提示:通过最简单的方式构建电话号码.每个数字不必单独确定. "

好的,突出显示的句子就是我正在看的内容.这是我的代码:

import java.util.Random;
public class PP33 {
  public static void main (String[] args) {
    Random rand = new Random();

    int num1, num2, num3;

    num1 = rand.nextInt (900) + 100;
    num2 = rand.nextInt (643) + 100;
    num3 = rand.nextInt (9000) + 1000;

    System.out.println(num1+"-"+num2+"-"+num3);
  }
}
Run Code Online (Sandbox Code Playgroud)

我怎么想这样做?我在第3章,所以我们尚未讨论if语句等,但别名,字符串类,包,导入声明,随机类,数学类,格式输出(decimal-和numberFormat),Printf,枚举和包装类+自动装箱.因此,请考虑仅根据这些假设回答问题.

代码没有任何错误.

谢谢!

And*_*ell 8

看来这似乎是作业,我觉得应该给出解释正在发生的事情.

您需要生成三组数字.

第一个数字的要求最高.它必须大于100但不包含8或9.

您可以通过以下方式确保它始终大于100:

(rand.nextInt(7)+1) * 100. 
Run Code Online (Sandbox Code Playgroud)

这样说,生成一个介于0和6之间的随机数.为该数字添加1,以确保它永远不会为0.因此,如果它选择0,则添加+1使其成为1.如果选择6,则添加+1 7,等等.这满足规则#1和规则#2.

您确保第一个号码永远不会有8或9.

(rand.nextInt(8) * 10) + rand.nextInt(8)
Run Code Online (Sandbox Code Playgroud)

从0-7创建一个随机数.*10确保它位于第十位,而最后一位将数字放在最后位置.

而不是尝试修复其他答案,因为它也错误地使用DecimalFormat.

package stackoverflow_4574713;

import java.text.DecimalFormat;
import java.util.Random;

public class Main {
         public static void main(String[] args) {

        Random rand = new Random();
        int num1 = (rand.nextInt(7) + 1) * 100 + (rand.nextInt(8) * 10) + rand.nextInt(8);
        int num2 = rand.nextInt(743);
        int num3 = rand.nextInt(10000);

        DecimalFormat df3 = new DecimalFormat("000"); // 3 zeros
        DecimalFormat df4 = new DecimalFormat("0000"); // 4 zeros

        String phoneNumber = df3.format(num1) + "-" + df3.format(num2) + "-" + df4.format(num3);

        System.out.println(phoneNumber);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

662-492-1168
Run Code Online (Sandbox Code Playgroud)


pwc*_*pwc 5

对于前三位数字,您需要分别生成每个数字。请参阅下面的变量 i1、i2 和 i3。

对于三位数字,0 到 741 之间的任何数字都可以使用。

对于最后一组四位数字,0 到 9999 之间的任何数字都可以使用。

这里的技巧是如何格式化输出。你可以用一个NumberFormat对象来做,但我选择用String.format()方法来做。在其中,您指定要如何格式化每个数字。所以,我使用了格式字符串"%d%d%d-%03d-%04d"。所述%d插入件的基部-10格式的整数到字符串。在%03d肯定使得它广三个字符,用任何额外的空间是左填充0。换句话说,4被格式化为"004"并且27被格式化为"027"。在%04d工作方式类似,但它是广泛四个大字。

这是你如何把它们放在一起的。

随机 r = 新随机();

int i1 = r.nextInt(8); // 返回 0 到 7 之间的随机数
int i2 = r.nextInt(8);
int i3 = r.nextInt(8);
int i4 = r.nextInt(742); // 返回 0 到 741 之间的随机数
int i5 = r.nextInt(10000); // 返回 0 到 9999 之间的随机数

String phoneNumber = String.format("%d%d%d-%03d-%04d", i1, i2, i3, i4, i5);
System.out.println(电话号码);`

  • 这不是原始问题中的要求:“不要让前三位数字包含 8 或 9(但不要比这更严格)” (3认同)