Java Fundamental day06

来源:互联网 发布:sql加用户名和密码 编辑:程序博客网 时间:2024/05/18 03:12
笔记:
1.方法:函数、过程
  1)用于封装一段特定的业务逻辑功能
  2)方法要尽可能的独立,一个方法只干一件事
  3)方法可以被反复调用多次
  4)可以减少代码重复,有利于代码的维护,有利于团队协作
2.方法的定义:
    修饰词 返回值类型 方法名(参数列表){
 方法体
}
3.方法的调用:
  1)无返回值: 方法名(有参传参);
  2)有返回值: 数据类型 变量 = 方法名(有参传参);
4.return:
  1)return 值; //1.1)结束方法的执行 1.2)返回结果给调用方
  2)return;    //1.1)结束方法的执行
5.扩展:-----今天先会用,后期会详细讲
    String str = "abcde";
  1)将字符串转换为大写字母或小写字母
      str = str.toUpperCase(); //ABCDE
      str = str.toLowerCase(); //abcde
  2)将字符串转换为字符数组
      char[] input = str.toCharArray();
  3)判断字符串内容是否相同
    equals()方法返回值为boolean类型
      if(str.equals("EXIT")){ //内容相同

 }



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<target.length;t++){
System.out.print(target[t]+"  ");
}

}

         static int[] GenerateArray(int ilh,int range){
int[] generate=new int[ilh];
boolean[] bn=new boolean[range+1];
for(int g=0;g<generate.length;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<output.length;o++){
int index;
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<input.length;i++){
for(int o=0;o<output.length;o++){
if(input[i]==output[o]){
  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.length;i++){                              //先由字符串转char,再转String,然后Integer
  inb[i]=Integer.parseInt(String.valueOf(Inb.charAt(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<Double> set=new HashSet<Double>();
while(set.size()<counts){
set.add((0.01+Math.random()*(M-(counts*0.01)))-sum);
}
  Object[] ints=set.toArray();
  for(int i=0;i<ints.length;i++){
System.out.println(ints[i]+"  ");
  }
}
}



今日重点,方法封装和项目分析,数据结构选择,要求完全掌握猜字符的项目。

0 0