需求
设计一个方法,获取start到end之间的随机数!
分析
- Math.random()方法获取0~1之间的随机数,不包含1,返回值类型为double。
- 获取1~100之间的随机数我们这么做;
int num=Math.random()*100+1; - 假想1:如果我们要取start到end之间的随机数,那么是不是可以写成:
int number=(int)(Math.random()*end+start)? - 假想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);
}