第一阶段
面向对象
-
容器:数组、对象、集合
对象容器:长度是固定的,可以装任何数据类型,所有的元素的数据必须一致
数组容器:长度固定,可以装任何数据类型,数据类型可以不一样,还可以装方法 -
储存一个学生的信息
学号 String;姓名 String;年龄 int;性别 char; -
怎么装:
- 创建这个容器的模版 → 类
- 在这个类中规定存储的所有数据以及对应的数据类型,以及那些方法
- 在适当的地方根据模板创建出真正的容器出来(对象)
- 往里面装数据
1. 成员属性:
作用:规定了可以存哪些数据以及对应的数据类型
( 格式 ) 修饰符 数据类型 取个名字;
public String num;
public String name;
public int age;
public char sex;
2. 构造方法:
作用:1.为了能够创建出对象
2.初始化一些数值
( 格式 ) 修饰符 方法名(参数列表){方法体};
第一种:( 空参 ) public Student(){}
第二种:( 有参 ) public Student(String no , String n , int a){
num = no;
name = n;
age = a;
}
- 调用有参的构造方法来创建学生
( 格式 ) 类名 取个名字 = new 构造方法名(参数列表);
Student stu = new Student(“JF1810”,“张飞”,18);
3.成员方法
作用:储存哪些方法,这个对象具有哪些功能
( 格式 ) 修饰符 返回值类型 方法名(参数列表){方法体}
public int add(int a,int b){
return a+b;
}
- 在main方法中调用,根据学生的模版,创建出学生对象容器
public static void main{
类名 取个名字 = new 构造方法名();
Student stu = new Student();
stu.num = "JF1810";
stu.name = "刘";
//使用学生加法
int sum = stu.add(1,2);
System.out.println(sum);
}
- 如何遍历一个对象
定义一个数组,数组的元素是Student Student[]
Student[] stus = {stu1,stu2,stu3};
for(int i = 0; i <stus.length;i++){
System.out.println(stu[i].num + "," + stu[i].name);
}
方法的重载(重点!!!)
出现在同一个类中,方法名相同,参数列表不同(个数不同或顺序不同或数据类型不同),与返回值无关
练习
一.、基础
1.创建一个 学生类 Student,属性:姓名,年龄,学号,手机号
2.学生有一个自我介绍的方法showMe,(我的名字叫XX,我XX岁)
3.将自己本排的6位同学创建出来,分别调用他们各自的自我介绍的方法
4.将本排的同学放进数组中,遍历出他们的学号和姓名。
---------Student类-----------
package test1;
public class Student {
// 学生姓名
String name;
// 学生年龄
int age;
// 学生学号
String num;
// 学生手机号
String tel;
public Student(String n, String na) {
// 传入的学号
num = n;
// 传入的名字
name = na;
}
// 自我介绍的方法
public void showMe(String name, int age) {
System.out.println("我的名字是" + name + ",我" + age + "岁");
}
}
---------Test类-----------
package test1;
public class Test {
public static void main(String[] args) {
Student stu1 = new Student("JF181001", "a");
stu1.showMe("a", 25);
Student stu2 = new Student("JF181002", "b");
stu1.showMe("b", 23);
Student stu3 = new Student("JF181003", "c");
stu1.showMe("c", 30);
Student stu4 = new Student("JF181004", "d");
stu1.showMe("d", 20);
Student stu5 = new Student("JF181005", "e");
stu1.showMe("e", 22);
Student stu6 = new Student("JF181006", "f");
stu1.showMe("f", 24);
System.out.println();
System.out.println("----------------------");
Student[] stus = { stu1, stu2, stu3, stu4, stu5, stu6 };
for (int i = 0; i < stus.length; i++) {
System.out.println(stus[i].name + "的学号是:" + stus[i].num);
}
}
}
二、猜拳游戏(面向对象版)
1.将猜拳游戏改造成面向对象版:玩家类,机器人类,裁判类,运行类,专门写main的类
2.玩家类:玩家姓名,出拳数,出拳的方法
3.机器人类:名字,出拳数,出拳的方法
4.裁判类:名字,玩家得分,电脑得分,判断胜负的方法
5.运行类Game:start(),承载main方法的类 Test
6.要求一开始玩家输入姓名开始游戏(s.next()方法输入字符串 )
7.赢一局得2分,先到10分者获胜(判断特殊情况)
8.8-重新开始,0-退出游戏
---------Player类-----------
package guess;
import java.util.Scanner;
//玩家的模版
public class Player {
//成员属性 全局变量 当前这个类中所有的地方都能直接调用到
//名字
public String name;
//出拳数
public int num;
//构造方法
public Player(){
name = "玩家";
}
//成员方法 出拳的方法 返回值 参数列表
public void guess(){
//玩家 出拳 键盘输入 局部:只能在当前这个方法内调用到
Scanner s = new Scanner(System.in);
//控制台 让玩家输入一个数字,将数字存储在
num = s.nextInt();
switch(num){
case 1:
System.out.println(name + "出的是:石头");
break;
case 2:
System.out.println(name + "出的是:剪刀");
break;
case 3:
System.out.println(name + "出的是:布");
break;
default:
break;
// 重新开始 continue 退出游戏 不方便
}
}
}
---------Robot 类-----------
package guess;
import java.util.Random;
//机器人的模版
public class Robot {
public String name = "阿尔法狗";
public int num;
public Robot(){
}
//机器人出拳的方法
public void ranNum(){
Random r = new Random();
num = r.nextInt(3)+1;// 1 2 3
switch(num){
case 1:
System.out.println(name + "出的是:石头");
break;
case 2:
System.out.println(name + "出的是:剪刀");
break;
case 3:
System.out.println(name + "出的是:布");
break;
default:
break;
// 重新开始 continue 退出游戏 不方便
}
}
}
---------Judge 类-----------
package guess;
//裁判的模版
public class Judge {
//裁判的名字
public String name;//null
//玩家得分
public int playerScore;// 0
//电脑得分
public int robotScore;// 0
public Judge(){
}
//方法的重载:出现在同一个类中,方法名相同,参数列表不同( 数量 ||顺序 || 数据类型 ),与返回值无关
public Judge( String n ){
name = n;
}
//判断 玩家出的什么拳 num 电脑出的什么拳 num
public void check( int pNum ,int rNum ,String pName,String rName ){
if(pNum==rNum){
System.out.println(name +"判定平局!" );
}else if(pNum==1&&rNum==2 || pNum==2&&rNum==3 || pNum==3&&rNum==1){
System.out.println(name +"判定【"+ pName +"】胜。" );
playerScore+=2;
}else{
System.out.println(name +"判定【"+ rName +"】胜。" );
robotScore+=2;
}
}
}
---------Game 类-----------
package guess;
import java.util.Scanner;
//游戏运行的类
public class Game {
public void start(){
// 面向对象的编程 保证 操作的 是同一个对象 不要到处new对象
//游戏的过程
welcome();
Scanner s = new Scanner(System.in);
Player p = new Player();
Robot ro = new Robot();
Judge ju = new Judge("正义审判");
System.out.println("请输入昵称:");
p.name = s.next(); //存在 玩家 的 name里面
System.out.println("欢迎您:"+ p.name);
while(true){
System.out.println("请出拳:1-石头 2-剪刀 3-布 9-重新开始 8-退出游戏");
//调用玩家出拳的方法
p.guess();
//判断退出游戏
if(p.num==8){
System.out.println("谢谢再见!");
break;//return;
}
//判断重新开始
if(p.num==9){
System.out.println("游戏即将重新开始。。。");
//还原数据 分数 还原
ju.playerScore = 0;
ju.robotScore = 0;
continue;
}
//先判断玩家出拳的合法性
if(p.num<1 || p.num>3){
System.out.println("出拳有误!");
continue;
}
//电脑出拳
ro.ranNum();
//裁判判断
ju.check(p.num, ro.num, p.name, ro.name);
//显示当前比分
System.out.println("当前比分-----"+ ju.playerScore+":"+ju.robotScore);
//结束的判断
if( ju.playerScore==10 || ju.robotScore==10 ){
System.out.println("。。游戏结束。。");
if( ju.playerScore > ju.robotScore ){
System.out.println("最终"+ p.name +"获得胜利!");
}else{
System.out.println("最终"+ ro.name +"获得胜利!");
}
//结束游戏 continue break return
break;
}
}
}
public void welcome(){
System.out.println("*************");
System.out.println("欢迎来到猜拳游戏");
System.out.println("*************");
}
}
---------Test 类-----------
package guess;
public class Test {
public static void main(String[] args) {
//创建一个游戏运行的对象容器 调用 容器中的方法
Game g = new Game();
g.start();
}
}