}
tips:数组不能用字符串连起来,否则生成一个地址了。
练习:完全掌握猜字母游戏。
游戏等级设为三等:5、7和9,代表所需要猜测的字母个数。游戏开始时,由玩家选择游戏等级(5,7,9)。如果选择7,则会随机产生7个字符,然后玩家输入一个字符串包含7个字符,看这7个字符和随机产生的7个字符比较,看是否正确,并统计分数。另外,如果输入其它,重新提示输入游戏等级。
HW:
//1.封装一个方法generateArray,该方法实现生成指定长度的int数组,该数组的元素为0到指定范围内的随机数,并将该数组返回。
package day06;
/**
* @author Tyson MJ
* @Time 2017-2-23上午08:44:17
* @Description
*/
import java.util.Scanner;
public class HomeWork {
public static void main(String[] args) {
System.out.println("Input the Range and Array's length:");
int range=sc.nextInt();
int ilh=sc.nextInt();
int[] target=GenerateArray(ilh,range);
for(int t=0;t
}
}
static int[] GenerateArray(int ilh,int range){
int[] generate=new int[ilh];
boolean[] bn=new boolean[range+1];
for(int g=0;g
int index;
do{
index=(int)(Math.random()*(range+1));
}while(bn[index]==true);
bn[index]=true;
generate[g]=index;
}
return generate;
}
//2.猜字母游戏
/** 一.先设计数据结构:数据。
* 1.字符数组char[]system;char[]input
* 2.整型数组int[]result;(比多个int变量要方便,字符,字符位置,得分,猜测次数。)
*
* 二.设计程序结构:方法。
* 1.main方法:用户输入的字符数组可以由字符串命令转换,可以放主方法内
* 2.系统生成字符数组方法:public staticchar[]generate(){}
* 3.匹配两个字符数组结果的方法:int[]result(){};两个数组对比最容易,就先完成它。
* 三.设计算法:
*/
import java.util.Scanner;
public class HomeWork {
public static void main(String[] args) {
System.out.println("Input a number:");
Scanner sc=new Scanner(System.in);
int Olh=sc.nextInt();
int Rlh=2,counts=0,score=100*Olh;
char[] output=Output (Olh);
//System.out.println(output); // java中char数组可以不需要遍历直接输出
System.out.println("Input Please (Quit by Exit):");//User Input in main{}
do{
String Input=sc.next().toUpperCase(); // 接收到的字符串一律转成大写
if(Input.equals("Exit")){
System.out.println("Tks and See U Late:");
break;
}
char[] input=Input.toCharArray(); // 将输入的字符串转成字符数组,得到input[]
int[] result=Check(output,input,Rlh);
if(result[1]==output.length){
score=Olh*100-10*counts;
System.out.println("Right!U're Score is:"+score);
break;
}else{
counts++;
System.out.println("Error!Correct Letters is:"+result[0]+"\tCorrect Position Letters is:"+result[1]);
}
}while(true); // 不限次数,故切死循环,只要输入正确或自动退出时才退出循环。
}
public static char[] Output(int Olh){
char[] output=new char[Olh];
String Letters="abcdefghijklmnopqrstuvwxyz".toUpperCase();
char[] letters=Letters.toCharArray(); // 随机数组的范围,从此数组中挑不同的元素组成。
boolean[] bn=new boolean[letters.length]; // 开关默认为26个false
for(int o=0;o
do{
index=(int)(Math.random()*letters.length); // 26个字母的数组下标最大为25,随机数可能由重复的情况,需要设置个开关筛选,也可直接判断index是否重值。
}while(bn[index]==true); // 不断产生随机字符,复刻到button中,只要复刻过程中button[index]的值已经是true了,说明已经存过,是重值,所以重新选存。
bn[index]=true; // 每当产生一个随机字符就按相同位置存入button数组中,即复刻的过程,该位置只要复制了一个字符,button[index]的值自然由false变true。
output[o]=letters[index];
}
return output;
}
public static int[] Check(char[] output,char[] input,int Rlh){
int[] checkresult =new int[Rlh]; //Correct Letters=result[0],Correct Position Letters=result[1]。
for(int i=0;i
checkresult[0]++; //字符正确数,字符正确,位置不一定正确,但同位置上字符正确则字符数一定正确。
if(i==o){
checkresult[1]++; // 同位置上字符匹配正确,这个被包含在字符正确的情况下
}
break; // 只要找到配对的字符,则没必要再和generate内的其他字符比了,跳出循环。
}
}
}
return checkresult;
}
}
//3.封装一个comp排序方法,数组找出中间数。
public static int comp(int a, int b, int c, int d, int e) {
int[] arr = new int[] { a, b, c, d, e };
int i = 0;
for (i = 0; i <= arr.length - 1; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
Arrays.sort(arr);
for (i = 0; i <= arr.length - 1; i++) {// 升序
System.out.print(arr[i] + " ");
}
for (i = arr.length - 1; i >= 0; i--) {// 降序
System.out.print(arr[i] + " ");
}
return arr[arr.length / 2];
}
//4.封装一个随机数制造器,用于双色球、大乐透摇号、微信抢红包。拓展,开发一副牌的程序。
package day06;
/**
* @author Tyson MJ
* @Time 2017-2-23下午12:51:05
* @Description
*/
import java.util.Scanner;
public class LotteryTest {
public static void main(String[] args) {
//
Lottery Game = new Lottery();
do {
System.out.println("Please choose DCB、Lotto、Money(Quit By Exit):");
Scanner sc = new Scanner(System.in);
String Letters = sc.next().toUpperCase();
if (Letters.equals("EXIT")) {
System.out.println("Tks And Goodbye!");
break;
}
if (Letters.equals("DCB")) {
int[] DCB=Game.DCB();
System.out.println("\nInput The Red and Blue:");
String Inb=sc.next();
int[] inb=new int[DCB.length];
for(int i=0;i
//Inb.charAt(i)得到字符串i的位置值。
//String.valueOf();转char类为字符串
if(inb[i]==DCB[i]){
System.out.println("ALL Right!");
if(inb[6]==DCB[6]){
System.out.println("Blue Right!");
}
break;
}
}
}
if (Letters.equals("LOTTO")) {
Game.Lotto();
}
if (Letters.equals("MONEY")) {
System.out.println("输入金额数和红包个数(空格隔开分别输入即可):");
double M = sc.nextDouble();
int counts = sc.nextInt();
Game.ScrambleMoney(M, counts);
}
System.out.println();
} while (true);
}
}
class Lottery {
int Lh, Range;
int[] Random() {
int[] random = new int[Lh];
boolean[] bn = new boolean[Range + 1];
for (int r = 0; r < random.length; r++) {
int index;
do {
index = (int) (Math.random() * Range + 1);// 1-Range
} while (bn[index] == true);
bn[index] = true;
random[r] = index;
}
return random;
}
int[] DCB() {// 双色球摇号
System.out.println();
Lh = 6;
Range = 33;
int[] DCBr = Random();
Lh = 1;
Range = 16;
int DCBb = (int) (Math.random() * Range + 1);
int []DCB=new int[7];
DCB[6]=DCBb;
System.arraycopy(DCBr, 0, DCB, 0, 6);
for (int b = 0; b < DCB.length; b++) {
System.out.print(" \t" + DCB[b] + " ");
}
return DCB;
}
void Lotto() {// 大乐透
System.out.println();
Lh = 5;
Range = 33;
int[] Lottor = Random();
for (int r = 0; r < Lottor.length; r++) {
System.out.print(Lottor[r] + " ");
}
Lh = 2;
Range = 16;
int[] Lottob = Random();
for (int b = 0; b < Lottob.length; b++) {
System.out.print(" \t" + Lottor[b] + " ");
}
}
void ScrambleMoney(double M, int counts) { // 微信抢红包,限制200元,最多100个,每个最低0.01元,当红包只有一个时单个最多M-0.01*counts元,
System.out.println();
double range = (0.01 + Math.random() * (M - (counts * 0.01)));// 范围0.01-M-0.01*counts
System.out.println(range + " "); // 并不要求随机数互不同,所以容易点
double[] money = new double[counts]; //全部红包个数,遍历出来
double sum = 0;
for (int m = 0; m < money.length-1; m++) {
range = (0.01 + Math.random() * (M - counts * 0.01 - sum));
money[m] = range;
sum += money[m];
System.out.print(money[m] + " ");
}
money[money.length-1]=M - sum;
System.out.print(money[money.length-1] + " ");
sum += money[money.length-1];
System.out.println("\nsum=" + sum);
}
}
//5.关于伪随机数hashset的用法,后面会学,先了解。
package day06;
/**
* @author Tyson MJ
* @Time 2017-2-23上午08:17:47
* @Description
*/
import java.util.HashSet;
public class SetHashNumber {
public static void main(String[] args) {
double M=5;
int counts=4;
double sum=0;
HashSet
while(set.size()
}
Object[] ints=set.toArray();
for(int i=0;i
}
}
}
今日重点,方法封装和项目分析,数据结构选择,要求完全掌握猜字符的项目。