面试题之获取start到end之间的随机数

来源:互联网 发布:netgear网络存储 编辑:程序博客网 时间:2024/04/29 23:45

需求

设计一个方法,获取start到end之间的随机数!

分析

  1. Math.random()方法获取0~1之间的随机数,不包含1,返回值类型为double。
  2. 获取1~100之间的随机数我们这么做;
    int num=Math.random()*100+1;
  3. 假想1:如果我们要取start到end之间的随机数,那么是不是可以写成:
    int number=(int)(Math.random()*end+start)?
  4. 假想2:如果我们要取start到end之间的随机数,那么是不是可以写成:
    int number=(int)(Math.random()*(end-start+1)+start)?

Demo1

package cn.edu.pzhu_01;import java.util.Scanner;public class MathTest {    public static void main(String[] args) {        Scanner sc=new Scanner(System.in);        System.out.println("请输入start:");        int start=sc.nextInt();        System.out.println("请输入end:");        int end=sc.nextInt();        for (int i = 0; i < 100; i++) {            int x=1;            System.out.print(getRandom(start,end)+",");        }    }    public static int getRandom(int start, int end) {        return (int)(Math.random()*end+start);    }}

这里写图片描述
注:由于运行过程中出现了比end还大的数,即不在范围内的数,所以假想1不合理。

Demo2

package cn.edu.pzhu_01;import java.util.Scanner;/** * 面试题:设计一个方法,获取start到end之间的随机数 *  *  分析 *      A:从键盘录入数据 *      B:调用方法 *      C:输出结果 * */public class MathTest {    public static void main(String[] args) {        Scanner sc=new Scanner(System.in);        System.out.println("请输入start:");        int start=sc.nextInt();        System.out.println("请输入end:");        int end=sc.nextInt();        for (int i = 0; i < 100; i++) {            int x=1;            System.out.print(getRandom(start,end)+",");        }    }    public static int getRandom(int start, int end) {        return (int)(Math.random()*(end-start+1)+start);    }   }

这里写图片描述
注:经过多次测试,产生的结果均在start~end范围内,假想2合理。

结果

产生start~end之间的随机数的方法封装为:

public static int getRandom(int start, int end) {        return (int)(Math.random()*(end-start+1)+start);    }   
0 0