将来我们去做一些需求,都是一个一个方法来实现的,所以在这里我们采用方法来编写所有案例。
备注:因为该题为java的基础练习,没有用到集合,使用集合的话会跟简单,之后会出,请见谅.
分析:
1.首先,考虑方法是否需要接收数据处理?
需要接收5个红包,至于是哪5个红包,可以有调用者传递;把5个红包的数值,用数组来存 储。
所以,参数就是一个数组
2.接着,考虑方法是否需要有返回值?
按照需求的效果,抢完红包就直接打印了,不需要返回值
3.最后,考虑方法内部的业务逻辑是怎么的?
(1)首先,写一个循环,循环次数为数组的长度
(2)每次循环,键盘录入,提示"用户录入任意键抽奖:"
(3)随机从数组中产生一个索引,获取索引位置的元素,这个元素就表示抽的红包
如果值不为0,则打印如:"恭喜您,您抽中了520元",把这个位置元素置为0
如果值为0,则说明这个红包被抽过,重新循环到第2步,重新抽奖
代码:
package cn.itcast.practices;
import java.util.Random;
import java.util.Scanner;
public class Test7 {
public static void main(String[] args) {
int[] arr = {10, 20, 45, 48, 78, 26};
method(arr);
}
public static void method(int[] arr) {
//创建对象
Random random = new Random();
Scanner scanner = new Scanner(System.in);
//1)首先,写一个循环,循环次数为数组的长度
for (int i = 0; i < arr.length; i++) {
System.out.println("请输入任意内容抽奖");
scanner.next();
//一直抽,抽到后把该值改为0并退出循环
while (true) {
//3)随机从数组中产生一个索引,获取索引位置的元素,这个元素就表示抽的红包
int index = random.nextInt(arr.length);
//如果取出的元素不为0就输出打印,并且把当前值改为零
// 如果为零就继续while循环直到不为零
if (arr[index] != 0) {
System.out.println("恭喜你中:"+arr[index]);
arr[index] = 0;
break;
}
}
}
}
}
运行:
备注:这里我使用的是循环遍历的方法,简单容易理解
分析:
1.首先,考虑方法是否需要接收数据处理?
方法需要两个参数来接收范围的开始值start,和范围的结束值end
2.接着,考虑方法是否需要返回值?
返回值就是素数的个数
3.最后,考虑方法内部的业务逻辑
思考:怎么判断一个数是素数呢?要仅仅抓住,素数的要求:“只能被1和本身整除的数是素数”。我们可以从反向思考,如果这个数只要能被除了1和本身以外的数整除,那么这个数就不是素数。
人话就是: 这个数与除1之外小于它的数取余不为0就是质数.
代码:
package cn.itcast.practices;
//求质数(循环遍历的方法)
public class Test8 {
public static void main(String[] args) {
primeNumber(101, 200);
}
public static void primeNumber(int start, int end) {
//i表示当前数,j表示小于它的数
for (int i = start; i < end; i++) { //101-200间的遍历
int count = 0;
for (int j = 2; j < i; j++) { // 3/2 4/2 4/3 5/2 5/3 5/4
if (i % j == 0) { //如果当前数与2到小于当前数的值进行取余 如果没有余数
count++; //证明不是质数,则count++
break;
}
}
if (count == 0) { //判断如果count没有数,证明是质数
System.out.println(i);
}
}
}
}
运行:
1.首先,考虑方法是否需要接收数据处理?
需要接受用户属于如的双色球号码
2.接着,考虑方法是否需要返回值?
需要创建两个方法,一个方法用来系统生成一注双色球彩票的号码可以用一个数组来存
所以,返回值是一个数组. 一个方法用来记录用户输入一注双色球彩票的号码,可以用一个数组来存所以,返回值是一个数组.
3.最后,考虑方法内部的业务逻辑怎么编写?
1)首先需要准备2个int类型数组,长度为7; 用于存储系统和用户的投注号码
2)用户: 循环遍历数组的前6个元素,采用键盘录入的方式,给前区6个红球赋值
系统: 随机生成数组的前6个元素,给前区6个红球赋值
要求录入的整数在1~33范围内,同时录入的整数在数组中不能已存在,否则重新录入
3)最后再录入一个整数,给后区一个蓝球赋值
要求整数必须在1~16范围内
代码:
package cn.itcast.practices;
import java.util.Random;
import java.util.Scanner;
public class Test9 {
public static void main(String[] args) {
int[] arrSys = systomBoll(); //数组:系统随机
//printAll(arrSys); //打印系统生成的数字,可以没有
int[] arrUser = userBoll(); //数组:用户输入
printAll(arrUser);
//开奖
kaiJiang(arrSys, arrUser);
}
//开奖方法,用户输入的球与随机生成的球对比
public static void kaiJiang(int[] arrSys, int[] arrUser) {
//定义变量记录红球中间个数和蓝球个数
int radCount = 0;
int blueCount = 0;
//1.遍历用户的球
for (int i = 0; i < arrUser.length - 1; i++) {
//遍历系统所有的红球和用户的arrUser[i]去比较
for (int j = 0; j < arrSys.length - 1; j++) {
if (arrUser[i] == arrSys[j]) {
radCount++;
}
}
}
blueCount = arrUser[arrUser.length - 1] == arrSys[arrSys.length - 1] ? 1 : 0;
if (radCount + blueCount == 7) {
System.out.println("恭喜你中一等奖1000万");
} else if (radCount == 6) {
System.out.println("恭喜你中二等奖500万");
} else if (radCount == 5 && blueCount == 1) {
System.out.println("恭喜你中三等奖3000元");
} else if (radCount + blueCount == 5) {
System.out.println("恭喜你中四等奖200元");
} else if (radCount + blueCount == 4) {
System.out.println("恭喜你中五等奖10元");
} else if (radCount + blueCount <= 3 && radCount + blueCount > 0) {
System.out.println("恭喜你中六等奖5元");
} else {
System.out.println("没有中奖,感谢您的参与");
}
}
//方法:用于让用户投注一组号码并返回(前6个是红球号码,最后1个是蓝球号码
public static int[] userBoll() {
//1.定义动态数组装这7个球
int[] arr = new int[7];
//2.键盘录入
Scanner scanner = new Scanner(System.in);
//循环六个红球
for (int i = 0; i < arr.length - 1; i++) {
System.out.println("请输入第" + (i + 1) + "个红球,红球不能重复。");
int number = scanner.nextInt();
int count = 0;
for (int j = 0; j < i; j++) {
if (arr[j] == number) {
count++;
break;
}
}
if (count == 0) {
arr[i] = number;
} else {
System.out.println("您输入的红球重复,请重新输入");
i--;
}
}
//蓝色球
System.out.println("请输入第7个蓝球");
arr[arr.length - 1] = scanner.nextInt();
return arr;
}
//由系统随机产生一注双色球彩票开奖号码
public static int[] systomBoll() {
//1.创建动态数组来装球
int[] arr = new int[7];
Random random = new Random();
//2.前六个红色球1-33,不能重复
for (int i = 0; i < arr.length - 1; i++) {
int number = random.nextInt(33) + 1;
//检查number在arr中的前六个是否出现过
int count = 0;
for (int j = 0; j < 6; j++) {
if (arr[j] == number) {
count++;
break;
}
}
//判断统计的个数
if (count == 0) {
arr[i] = number;
} else {
//重复,再给一次机会
i--;
}
}
//随机一个蓝色球
arr[arr.length - 1] = random.nextInt(16) + 1;
return arr;
}
//遍历(方便遍历创建的方法)
public static void printAll(int[] arr) {
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println("]");
}
}
运行:
不足: 没有对数字的输入进行范围的条件判断