一,数据的 8 大基本类型:
Int tinyint smallint longint
Double float
Char
String
二,编程:
顺序考虑程序的逻辑
遇到分支:(选择)if 语句
if ..... else ....
if else if.... else ...
if
三,编程(游戏,逻辑中的算法)
剪刀石头布——程序 玩法:两个玩家,电脑(随机) 玩家
1、 玩家参与:输入用户名
2、 电脑:提供角色供选择
3、 玩家选择:1-剪刀 2-石头 3-布
4、 电脑随机选对一个数字 1,2,3
5、 判断对错(实现玩家赢或者电脑赢的结果)
(1)罗列出所有的可能性,判断每种可能性的实现
If 电脑==1 玩家==2
玩家 赢
Else if 电脑==2 玩家==3
玩家赢
Else if 电脑==1 玩家==3
电脑赢
Else if 玩家 ==1 电脑 ==2
电脑赢
Else if 电脑==3 玩家==2
电脑赢
Else if 玩家 ==1 电脑 ==3
玩家赢
Else:
平局
(2) 剪刀 石头 布
1 2 3
所有赢家 玩家 –电脑=1 || 玩家-电脑=-2(间隔数) 玩家赢
电脑-玩家=1||电脑-玩家=-2 电脑赢
最后: 平局
If 语句的特点:
不管 if 后面的条件是否成立,必须计算一遍
If 少写 else if
四,分析:
全局变量:
玩家的名字 player_name String
电脑的名字 com_name String
玩家出拳数字 player_choice 只能定义数值(参与运算) int 4
字节
电脑出拳数字 com_choice int 4 字节
注意:
(1)玩家出拳定义的是整形数字。这里要根据变量类型来决定
next 后面的后缀。
(2)在编程中出现整型数的不匹配,指存储空间大小问题
Int 4个字节, long 8 个字节来存储
遇到可以强制转化,把 long 前面加上(),再写类型
五,考虑 bug
(1) 只输入一个空格,会进入程序执行,next()不会
使用 trim()方法判定字符串是不是只有空格的变量
if(player_name.trim().equals("")){
player_name="匿名玩家";
}
(2)出拳时,输入 1.2
如果是 nextInt,如果输入的类型不是这个类型,就报错,报错后
程序退出。
程序安全运行,保证程序在输入控制台安全退出,不致于出现退
出,最好的方法只接收 next().
if(tmp_choice.equals("1") ||
tmp_choice.equals("2")||tmp_choice.equals("3")){
player_choice=(int)tmp_choice;
}
这里把不同类型做强转,强转是同类型发生的类型转化,不同类型通过 toXXX
转化,每一个基本类型都有一个大型的全称,int--Integer ,帮助我们提
供 to 方法,通过 to 方法决定什么类型转成什么类型
除了 char 和 int 是 java 自动强制,其它都要通过强化或转化方法来进行类型
的变换,强转:(类型)转化前的类型
转化方法:转化类型的全称大写.parse 转换类型
(3)最终输出,不清楚玩家和电脑的出拳名字.
需要加上电脑和玩家的出拳.这里还需要两个全局变量, 电脑出拳名称,玩家出
拳名称
(4) Math.random()
随机:伪随机
1,2,3机会不一定均等
第三点: 后面,效率
Javap 字节码,看机器是怎么执行的
从 javap 字节码中,javap –c XXXX.class 编译成字节码.
还有分支选择是 switch
先做一个 hashCode() 后面是 equals 注意 switch
switch(com_no.hashCode()) {
case 49:
if (com_no.equals("1")) {
var10 = 0;
}
break;
case 50:
if (com_no.equals("2")) {
var10 = 1;
}
}
先把 hashCode,结构顺序结构,Switch 条件直接去找条件,ifu,if 效率不高,swtich 效率高,一般代码,能用 switch 不用 if。
代码:
import java.util.Scanner;
public class Game1 {
public static void main(String[] args) {
//定义全局变量,玩家名字player_name,电脑名字com_name,玩家出拳player_choice,电脑出拳com_choice
String player_name;
String com_name;
int player_choice;
int com_choice;
//增加的bug变量,玩家的出拳名称 player_choice_name 电脑出拳名称 com_choice_name
String player_choice_name;
String com_choice_name;
//按照流程写程序
//欢迎界面
System.out.println("**********************************");
System.out.println(" 游戏:剪刀石头布");
System.out.println(" 作者:XXXXXX");
System.out.println(" 版本:v1.1");
System.out.println("*********************************");
System.out.println("欢迎进入本游戏,请输出游戏玩家的名字:");
//获取输入设备
Scanner scanner = new Scanner(System.in);
//结合上下文的变量来决定当前等式的变量,nextLine()游戏玩家的名字可以带空格
player_name=scanner.nextLine();
//玩家可能输入空格,哪一个结果为true,就是player_name的变量内容
// System.out.println(player_name.equals(""));
//这个变量的空格也可能是多个,包含空格 contains,这种 contains包含空格,但是中间也有,中间有合法
//只有player变量全是空格,不合法,trim()方法去掉字符串开头和结尾的空格
// System.out.println(player_name.trim().equals(""));
if(player_name.trim().equals("")){
player_name="匿名玩家";
}
// if(player_name)
//选择电脑的玩家
System.out.println("********************************");
System.out.println("1-----蜡笔小新");
System.out.println("2-----葫芦娃");
System.out.println("*********************************");
//需要用户选择玩家
String com_no=scanner.next();
if (com_no.equals("1")){
com_name="蜡笔小新";
}else if(com_no.equals("2")){
com_name="葫芦娃";
}else{
com_name="匿名用户";
}
//玩家出拳
System.out.println("****请玩家选择出拳的代表数字*********");
System.out.println("1------剪刀");
System.out.println("2------石头");
System.out.println("3------布");
System.out.println("*********************************");
//玩家出拳为了运算方便,使用数字,next()接收的是字符串,如果用户输入1.2
// player_choice=scanner.nextInt();
//因为变量player_choice是int型,直接接收可能会报错,这里使用字符串变量
String tmp_choice=scanner.next();
if(tmp_choice.equals("1") || tmp_choice.equals("2")||tmp_choice.equals("3")){
//因为不同类型String转化成整理,用到整型的大写Integer,调用parseInt方法,除char型和int型
//前面类型全称大写.parse类型,如Integer.parseInt,把后面变量的类型转化成需要的类型
player_choice=Integer.parseInt(tmp_choice);
}else{
//如果用户的选择在1,2,3之外,就随机给一个
player_choice=(int)Math.round(Math.random()*2+1);
}
//根据player_choice的名字,决定player_choice_name的名字,这里player_choice只有1,2,3
if(player_choice==1){
player_choice_name="剪刀";
}else if(player_choice==2){
player_choice_name="石头";
}else{
player_choice_name="布";
}
//当用户出拳出的是1.2,看player_choice
// System.out.println(player_choice);
//电脑出拳(Math.random()产生0-1 +1 1-2 Math.round四舍五入取整( 1,2),如果把Math.random()扩大2倍 0-2 +1 1-3
//把Math.random()*2扩大2倍,再加1,再round四舍五入,就会把数字变成1,2,3
//这里(int)强制转化,把long型的8个字节,只用4个字节存储,丢掉了4个字节,这里只有1,2,3
com_choice=(int)Math.round(Math.random()*2+1);
//如果你采用0,1,2,直接用(int)Math.random()*3
//也要判断电脑的出拳名称
if(com_choice==1){
com_choice_name="剪刀";
}else if(com_choice==2){
com_choice_name="石头";
}else{
com_choice_name="布";
}
//判断数值计算用==
if(player_choice-com_choice==1 || player_choice-com_choice==-2){
System.out.println("玩家:"+player_name+",出拳:"+player_choice_name+"赢");
System.out.println("电脑:"+com_name+",出拳:"+com_choice_name+"输");
}else if(com_choice-player_choice==1 || com_choice-player_choice==-2){
System.out.println("电脑:"+com_name+",出拳:"+com_choice_name+"赢");
System.out.println("玩家:"+player_name+",出拳:"+player_choice_name+"输");
}else{
System.out.println("电脑:"+com_name+",出拳:"+com_choice_name+"平局");
System.out.println("玩家:"+player_name+",出拳:"+player_choice_name+"平局");
}
}
}
运行结果: