双色球代码java实现
package Day03;
import java.util.Random;
import java.util.Scanner;
public class TwoColourBall {
//6个红球号码和1个蓝色号码组成,红球不能重复
//红球在1-33里面选,蓝球在1-16里面选
//一等奖:6+1=7 -- 1000万 二等奖:6+0=6 -- 500万 三等奖:5+1=6 -- 3000
//四等奖:5+0 4+1=5 -- 200 五等奖:3+1 4+0=4 -- 10 六等奖:0+1 1+1 2+1 >0 且蓝球中 -- 5
public static void main(String[] args){
//1 生成中奖号码
int[] numberRandomArray = winNumber();
for (int i = 0; i < numberRandomArray.length; i++) {
System.out.print(numberRandomArray[i]+" ");
}
//2 用户输入中奖号码
int[] numberUserArray = userArray();
for (int i = 0; i < numberUserArray.length; i++) {
System.out.print(numberUserArray[i]+" ");
}
//3 对比 计算红球中奖个数,蓝球中奖个数
int countRed = redCount(numberRandomArray,numberUserArray);
int countBule =buleCount(numberRandomArray,numberUserArray);
System.out.println("中奖金额为");
price(countRed,countBule);
}
//生成中奖号码
public static int[] winNumber(){
int[] number = new int[7];
Random r = new Random();
for (int i = 0; i < 6; ) {
int numRed = r.nextInt(33)+1;
boolean flag = contains(number,numRed);
if(!flag){
number[i] = numRed;
i++;
}
}
int numBule = r.nextInt(16)+1;
number[6] = numBule;
return number;
}
//判断红球是否重复
public static boolean contains(int[] arr,int num){
boolean flag = false;
for (int i = 0; i < arr.length; i++) {
if(arr[i]==num){
flag = true;
}
}
return flag;
}
//用户输入中奖号码
public static int[] userArray(){
int[] numberUserArray = new int[7];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 6;) {
System.out.println("请输入"+(i+1)+"红球数字");
int numberRed = sc.nextInt();
boolean flag = contains(numberUserArray,numberRed);
if(numberRed>=1&&numberRed<=33&&!flag){
numberUserArray[i] = numberRed;
i++;
}else if(flag){
System.out.println("输入的红球重复了,请重新输入!");
}else {
System.out.println("红球数字应该在1-33之间,请重新输入!");
}
}
System.out.println("请输入蓝球数字");
for (int i = 0; i < 1;) {
int numberBlue = sc.nextInt();
if(numberBlue>=1&&numberBlue<=16){
numberUserArray[6] = numberBlue;
i++;
}else {
System.out.println("蓝球数字应该在1-16之间,请重新输入!");
}
}
return numberUserArray;
}
//红球中奖个数
public static int redCount(int[] numberRandomArray,int[] numberUserArray){
int countRed = 0;
for (int i = 0; i < numberRandomArray.length-1; i++) {
for (int j = 0; j < numberUserArray.length-1; j++) {
if(numberRandomArray[i]==numberUserArray[j]){
countRed+=1;
}
}
}
return countRed;
}
//蓝球中奖个数
public static int buleCount(int[] numberRandomArray,int[] numberUserArray){
int countbule = 0;
int n = numberRandomArray.length-1;
if(numberRandomArray[n]==numberUserArray[n]){
countbule+=1;
}
return countbule;
}
//一等奖:6+1=7 -- 1000万 二等奖:6+0=6 -- 500万 三等奖:5+1=6 -- 3000
//四等奖:5+0 4+1=5 -- 200 五等奖:3+1 4+0=4 -- 10 六等奖:0+1 1+1 2+1 >0 且蓝球中 -- 5
public static void price(int countRed,int countBule){
int sum = countRed+countBule;
if(sum == 7){
System.out.println("恭喜中奖1000万!");
}else if(sum == 6&&countBule==0){
System.out.println("恭喜中奖500万!");
}else if(sum == 6&&countBule==1){
System.out.println("恭喜中奖3000!");
}else if(sum == 5){
System.out.println("恭喜中奖200!");
}else if(sum == 4){
System.out.println("恭喜中奖10!");
}else if(countBule==1){
System.out.println("恭喜中奖5!");
}
}
}
二维数组:数组中存数组
静态初始化: 数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2,元素3},{元素4,元素5,元素6}}; //建议这样定义,将一维数组写在单独一行 int[][] arr = new int[][]{ {1,2,3}, {4,5,6} }; arr[0]:获取二维数组中第一个一维数组(地址) arr[1]:获取二维数组中第一个一维数组索引为0的值 System.out.println(arr[0][1]); // 2
动态初始化 数据类型[][] 数组名 = new 数据类型[m][n]; m:这个二维数组可以存放多少个一维数组 n:每一个一维数组可以存放多少元素 int[][] arr1 = new int[6][5];
//练习 计算每个季度的金额和全年的金额
//第一季度:22,66,44
//第二季度:77,33,88
//第三季度:25,45,65
//第四季度:11,66,99
int[][] yearMonth = {
{22,66,44},
{77,33,88},
{25,45,65},
{11,66,99}
};
int yearMoney = 0;
for (int i = 0; i < yearMonth.length; i++) {
int monthMoney = 0;
for (int j = 0; j < yearMonth[i].length; j++) {
monthMoney+=yearMonth[i][j];
}
yearMoney +=monthMoney;
System.out.println("第"+(i+1)+"的季度值为"+monthMoney);
}
System.out.println("一整年的季度值为"+yearMoney);
面向对象
类:是对象共同特征的描述
- 成员变量(代表属性,名词)
- 成员方法(代表动词,动词)
- 构造器
- 代码块
- 内部类
对象:真实存在的具体东西
类名 对象名 = new 类名(); Phone p = new Phone();
package Day03;
public class Phone {
//属性
String brand;
double price;
//方法(行为)
public void call(){
System.out.println("手机可以打电话");
}
public void playGame(){
System.out.println("手机可以打游戏");
}
}
package Day03;
public class PhoneTest {
public static void main(String[] args){
//创建手机对象
// 类名 对象名 = new 类名();
Phone p = new Phone();
//使用对象
//访问属性:对象名.成员变量
p.brand = "小米";
p.price = 1999.9;
//获取手机对象的值
System.out.println(p.brand);
System.out.println(p.price);
//访问行为:对象名.方法名()
p.call();
p.playGame();
}
}
封装:对象代表什么,就得封装对应的数据,并提供数据对应的行为
private: 权限修饰符,只能在本类中使用 set:给成员变量赋值 和 get:对外提供成员变量的值
set方法:给成员变量赋值 get方法:对外提供成员变量的值
//调用 GrilFriend gf1 = new GrilFriend(); gf1.setName("小姚"); gf1.setAge(18); gf1.setSex("女"); String name = gf1.getName(); System.out.println(name); int age = gf1.getAge(); System.out.println(age); String sex = gf1.getSex(); System.out.println(sex);
就近原则和this关键字
this作用:可以区分成员变量和局部变量
构造方法:为了给成员变量赋值
package Day03; public class Student { 修饰符 类名(参数){ 方法体; } }
特点
- 方法名和类名完全一致
- 没有返回值类型
- 没有具体返回值,不能由return 带回结果
执行时机
- 创建对象时候由虚拟机调用,不能手动调用构造方法
- 没创建一次对象就会调用一次构造方法
构造方法注意
- 如果没有定义构造方法,系统会给出默认的构造方法;如果定义了构造方法,系统将不再提供默认构造方法
- 带参构造方法和无参构造方法虽然方法名相同,但是参数不同,这就叫构造方法的重载
- 无论是否使用,都手动书写无参数构造方法和带全部参数方法
快捷键 alt+Fn+insert 插件:ptg
成员变量和局部变量
成员变量 | 局部变量 | 区别 |
类中,方法外 | 方法内,方法声明中 | 位置 |
有默认初始化值 | 五默认初始化值,需要提前赋值 | 初始化 |
堆内存 | 栈内存 | 内存 |
随着对象的创建而存在,随着对象的消失而消失 | 随着方法的调用而存在,随着方法运行结束而消失 | 生命周期 |
类中有效 | 当前方法有效 | 作用域 |
面向对象格斗游戏
package Day03;
import java.util.Random;
public class Role {
private String name;
private int blood;
private String sex;
private String face;
String[] boy = {"温文尔雅","玉树临风" , "气宇不凡", "风流倜傥", "品貌非凡","仪表堂堂","清新俊逸"};
String[] gril = {"闭月羞花","国色天香","倾国倾城","貌美如花","明眸皓齿","冰肌玉骨","小家碧玉","窈窕淑女"};
String[] attacks_desc={
"%s使出了一招【背心钉】,转到对方的身后,一掌向%s背心的灵台穴拍去。",
"%s使出了一招【游空探爪】,飞起身形自半空中变掌为抓锁向%s。",
"%s大喝一声,身形下伏,一招【劈雷坠地】,捶向%s双腿。",
"%s运气于掌,一瞬间掌心变得血红,一式【掌心雷】,推向%s。",
"%s阴手翻起阳手跟进,一招【没遮拦】,结结实实的捶向%s。",
"%s上步抢身,招中套招,一招【劈挂连环】,连环攻向%s。"
};
String[] injureds_desc={
"结果%s退了半步,毫发无损",
"结果给%s造成一处瘀伤",
"结果一击命中,%s痛得弯下腰",
"结果%s痛苦地闷哼了一声,显然受了点内伤",
"结果%s摇摇晃晃,一跤摔倒在地",
"结果%s脸色一下变得惨白,连退了好几步",
"结果『轰』的一声,%s口中鲜血狂喷而出",
"结果%s一声惨叫,像滩软泥般塌了下去"
};
public Role(){}
public Role(String name, int blood,String sex) {
this.name = name;
this.blood = blood;
this.sex = sex;
//随机长相
setFace(sex);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getBlood() {
return blood;
}
public void setBlood(int blood) {
this.blood = blood;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getFace() {
return face;
}
public void setFace(String sex) {
Random r = new Random();
if(sex == "男"){
int index = r.nextInt(boy.length);
this.face =boy[index];
}else if(sex == "女"){
int index = r.nextInt(gril.length);
this.face =gril[index];
}else{
this.face = "一塌糊涂";
}
}
//攻击方法
//方法的调用者攻击参数
public void attack(Role role){
//攻击描述
Random r = new Random();
int index = r.nextInt(attacks_desc.length);
String kungFu = attacks_desc[index];
System.out.printf(kungFu,this.getName(),role.getName());
System.out.println(" ");
//计算随机造成伤害1-20
int hurt = r.nextInt(20)+1;
//计算剩余血量
int remainBlood = role.getBlood()-hurt;
if(remainBlood<0){
remainBlood=0;
}
role.setBlood(remainBlood);
//受伤描述
//血量大于90 索引0 血量大于80小于等于90 索引1
//血量大于60小于等于70 索引2 血量大于50小于等于60 索引3
//血量大于40小于等于50 索引4 血量大于30小于等于40 索引5
//血量大于20小于等于30 索引6 血量大于0小于等于20 索引7
if(remainBlood>90){
System.out.printf(injureds_desc[0],role.getName());
}else if(remainBlood>80){
System.out.printf(injureds_desc[1],role.getName());
}else if(remainBlood>70){
System.out.printf(injureds_desc[2],role.getName());
}else if(remainBlood>60){
System.out.printf(injureds_desc[3],role.getName());
}else if(remainBlood>50){
System.out.printf(injureds_desc[4],role.getName());
}else if(remainBlood>40){
System.out.printf(injureds_desc[5],role.getName());
}else if(remainBlood>30){
System.out.printf(injureds_desc[6],role.getName());
}else{
System.out.printf(injureds_desc[7],role.getName());
}
System.out.println(" ");
}
public void info(){
System.out.println("姓名:"+getName());
System.out.println("血量:"+getBlood());
System.out.println("性别:"+getSex());
System.out.println("长相:"+getFace());
}
}
package Day03;
public class RoleTest {
public static void main(String[] args){
//1 创建第一个角色
Role r1 = new Role("小姚",100,"女");
// r1.info();
//2 创建第二个角色
Role r2 = new Role("小张",100,"女");
// r2.info();
//3 开始格斗 回合制游戏
while (true){
//r1攻击r2
r1.attack(r2);
if(r1.getBlood()==0){
System.out.println(r1.getName()+"KO了"+r2.getName());
break;
}
r2.attack(r1);
if(r2.getBlood()==0){
System.out.println(r1.getName()+"KO了"+r2.getName());
break;
}
}
}
}
对象数组
package Day03;
public class GoodsTest {
public static void main(String[] args){
Goods g1 = new Goods("101","书",50,20);
Goods g2 = new Goods("102","键盘",100,30);
Goods g3 = new Goods("103","鼠标",200,80);
Goods[] arr = new Goods[3];
arr[0] = g1;
arr[1] = g2;
arr[2] = g3;
for (int i = 0; i < arr.length; i++) {
System.out.println("第"+i+"个商品信息:id为"+arr[i].getId()+",名字为"+arr[i].getName()
+",价格为"+arr[i].getPrice()+",库存为"+arr[i].getRemain());
}
}
}
键盘录入对象数组
package Day03;
import java.util.Scanner;
public class CarTest {
public static void main(String[] args) {
Car[] arr = new Car[3];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < arr.length; i++) {
Car c = new Car();
System.out.println("请输入第"+(i+1)+"个汽车品牌");
String brand1 = sc.next();
c.setBrand(brand1);
System.out.println("请输入第"+(i+1)+"个汽车价格");
int price = sc.nextInt();
c.setPrice(price);
System.out.println("请输入第"+(i+1)+"个汽车颜色");
String color = sc.next();
c.setColor(color);
arr[i] = c;
}
}
}