开始练习之前要注意的是:
a)为项目取一个合适的包名称.例如:package ljy.mytest.lotteryselecting;
b) 尽量一个JAVA 文件一个类,这样在以后的查询中也会一目了然,看一眼就知道这个类里面是什么内容。
c) 尽量为每一个方法都写上详细的注释:
例如:
/**
* 选出中奖彩球
* @param time 要选多少注彩票
* @param total 一共有多少的彩票球
* @param aim 一共要选出多少个彩票球
* @return 返回保存选中彩球结果的数组
*/
eclipse中在函数头部添加说明性注释和参数的注释:
1)你在方法前输入/**然后一回车,自动帮你生成方法和参数的注释。
2)或者你在创建方法时,勾选生成注释的选项,也能帮你生成。
3)要把鼠标焦点放在方法里,然后ALT+SHIFT+J
d)保证main()方法中尽量的简洁明了,这就需要你对方法的命名要言简意赅,不要忘记遵守“驼峰命名法”。
e) 要保证你写的方法的可扩展性,不要将其写死了,这也是减少你工作量最主要的方法之一。
题目:
2. 写一个36选7机选程序(如果有一天变为1000选 99 怎么办?)
机选注数: 1(如果有一天变成选100注又怎么办 ?)
4 12 14 18 21 32 35 (尽量按从小到大顺序输出)。
/**
*
*/
package ljy.mytest.lotteryselecting;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
/**
* @author fshxxxyydys
*
*/
public class LotterySelecting { //选彩票的小程序
/**
* @param args
*/
static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
int total,aim,time;//总球数,要选球数,注数
System.out.print("请输入注数:");
time = scanner.nextInt();
System.out.print("请输入总球数:");
total = scanner.nextInt();
System.out.print("请输入选球个数:");
aim = scanner.nextInt();
boolean sorted = isSorted();//判断是否需要排序
printResults(time,total,aim,sorted); //打印结果
}
/**
* 确认是否要对选票结果进行排序
* @return 返回是否排序的确认结果
*/
private static boolean isSorted(){
System.out.print("请确认结果是否排序('y'OR'n'):");
String str = scanner.nextLine();
if(str.length() == 0){ //输入回车键处理
str = scanner.nextLine();
}
if(str.length() == 1){
if(str.equalsIgnoreCase("n"))
return false;
else if(str.equalsIgnoreCase("y"))
return true;
else {
System.out.println("无法判断,请重新输入~");
isSorted();
}
}else {
System.out.println("无法判断,请重新输入~");
isSorted();
}
return false;
}
/**
* 选出中奖彩球
* @param time 要选多少注彩票
* @param total 一共有多少的彩票球
* @param aim 一共要选出多少个彩票球
* @return 返回保存选中彩球结果的数组
*/
private static int[] selectLottery ( int total ,int aim,boolean sorted){
int[] result = new int[aim];
Random r = new Random();
int temp ;
for(int i = 0 ; i < aim ; i++){
temp = 1 + r.nextInt(total); //注意:其中随机数中不包含 0
if(!isContain(result, temp))
result[i] = temp;
else
i--; //保证选的数量足够
}
if(sorted)
Arrays.sort(result);
return result;
}
/**
* 检测是否已经存在目标彩球
* @param result 保存已经选好的彩球的数组
* @param target 要检测是否已经存在数组的中的目标彩球
* @return 确认是否已存在
*/
private static boolean isContain(int[] result,int target){
for(int j = 0 ; j < result.length; j++)
if(result[j] == target)
return true;
return false;
}
/**
* 打印单次选彩票结果
* @param result 要打印的数组
*/
private static void printArrays(int[] result){
for(int x:result)
System.out.print(x +"\t");
System.out.println();
}
/**
* 打印选彩票的所有结果
* @param time 要选多少注彩票
* @param total 一共有多少的彩票球
* @param aim 一共要选出多少个彩票球
* @param sorted 是否要排序
*/
private static void printResults(int time,int total,int aim,boolean sorted){
for(int i = 0 ; i < time ; i++){
System.out.print("第"+ (i + 1) + "注:");
int[] temp = selectLottery(total,aim,sorted);
printArrays(temp);
}
}
}
====================================================================================
Result:
请输入注数:7
请输入总球数:36
请输入选球个数:7
请确认结果是否排序('y'OR'n'):y
第1注:3 6 13 27 283136
第2注:7 17 19 23 242830
第3注:6 14 18 23 283033
第4注:2 3 7 15 182835
第5注:1 2 11 15 223135
第6注:4 5 12 24 252636
第7注:3 14 25 26 272829
====================================================================================