java求解哪里错了?题目如下:

编写一个程序,创建一个种子为1000的 Random 对象,然后通过键盘输入一个整数,使用nextlnt() 方法显示 100到num+100-1之间前30 个随机整数,每10个要求换行。范例如下: 500 enter(回车键)
587 535 276 224 392 449 241 445 364 550
479 259 472 483 436 575 246 102 423 341
122 471 189 102 293 542 349
package 测试;
import java.util.Random;
import java.util.Scanner;
public class Test{
public static void main(String[] args){
Random random = new Random(1000);
Scanner input=new Scanner(System.in);
int num=input.nextInt();

for(int i=0;i<30;i++){
System.out.print((random.nextInt(num+100-1)+100)+" ");
if(i==9||i==19){
System.out.println();
}
}
}
}

问题分析:

根据题目的要求我们知道打印出的结果中的每一个数值value都应该满足:value>=100 且 value<=num+100-1

再看你的代码中打印的数值:

random.nextInt(num+100-1)+100

我们知道:

public int nextInt(int n)

该方法的作用是生成一个随机的整数值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。

假设输入num=500,那么

random.nextInt(num+100-1)

就会生成一个介于0到599直接的随机数,但是你又在这个随机数的基础上加上了100

random.nextInt(num+100-1)+100

这个数取值范围就变成了 100到699了,而期望得到的数据范围是100到599

参考解法:

import java.util.Random;
import java.util.Scanner;
public class Test{
    public static void main(String[] args){
        Random random = new Random(1000);
        Scanner input=new Scanner(System.in);
        int num=input.nextInt();
        for(int i=0;i<30;i++) { //控制找到前30个满足要求的随机数
            while(true) {
                int value = random.nextInt(num+100);
                if(value>=100) {
                    System.out.print(value + "  ");
                    break;//随机数满足要求,结束while继续找下一个
                }
            }
            if(i==9||i==19){ //每行打印10个数据
                System.out.println();
            }
        }
        System.out.println();
    }
}

运行结果:

程序分析:

首先会生成一个0到num+100-1的随机数,然后再判断这个随机数是否大于100,这样就保证了打印处的随机数值value都满足:value>=100 且 value<=num+100-1

注意:

题目要求中显示 100到num+100-1之间前30 个随机整数,对于两端是否包含100 或 num+100-1 自己修改就好了,我按照的是value>=100 且 value<=num+100-1

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-05-15
package com.test;

import java.util.Random;
import java.util.Scanner;
public class Test{
public static void main(String[] args){
//种子就是产生随机数的第一次使用值,机制是通过一个函数,将这个种子的值转化为随机数空间中的某一个点上,
// 并且产生的随机数均匀的散布在空间中。以后产生的随机数都与前一个随机数有关
Random random = new Random(1000);
Scanner input=new Scanner(System.in);
int num=input.nextInt();
int orgBit = num / 100;

for(int i=0;i<30;i++){
int orgVal = random.nextInt(num+100-1);//限制最大值
int bit = orgVal /100;
if(bit==0){//100以内的数,+100
System.out.print(orgVal+100+" ");
}else if(bit<=orgBit){//比输入的数字小,此时一定不是两位数
System.out.print(orgVal+" ");
}else{//比输入的数字大,判断是否在num+100-1范围内
int minus = bit-orgBit;
System.out.println(orgVal - minus*100);
}
if(i==9||i==19){
System.out.println();
}
}
}
}
第2个回答  2019-05-15
这里改一下:
for(int i=0;i<30;i++){
System.out.print((random.nextInt(num+100-1)+100)+" ");
if(i%10==9){
System.out.println();
}本回答被网友采纳