回顾
顺序结构
条件分支:
if
if - else
if - else if - else if … - else
switch(int\short\char\byte\String) - case - default
break
循环结构:
for(初始值; 循环条件; 步进方式){循环体}
有规律, 或者知道次数
while(循环条件) {循环体}
do{循环体} while(循环条件)
直到…
当… 没有规律, 或者不知道次数
终止循环: break
结束一次循环,继续下次循环: continue
数组
基本数据类型: byte\short\int\long\float\double\char\boolean
数组array: 最基本的一种数据结构 - 数据的排列方式
数组是第一种引用类型,是可以存储多个变量的容器
三种初始化方法:
int[] arr = {元素}; – 直接确定元素内容和长度
int[] arr = new int[] {元素} – 直接确定元素内容和长度(可以用来二次赋值,赋值后原数组在堆中消失,并创建一个新的数组数据堆,栈中的标识不变)
int[] arr = new int[num] – 确定长度, 内容默认值0
数组属性: 长度
arr.length: 不可变
数组元素: 通过下标/索引 index
index范围: 0 ~ length-1
arr[index] 访问\赋值
数组遍历: for循环
JVM内存空间
方法区: 存储类相关的信息
栈: 临时变量, 局部变量
堆: 引用类型的真正数据, 对象
类加载: 将字节码(class文件)中的类信息读取到JVM方法区中由类加载器完成
方法: 函数/过程, 包含了一些代码
主方法
语法/结构:
修饰词 方法返回值类型 方法名 (参数列表) {方法体}
public static void/int/int[]/boolean/String main/随意 int a, int b 一些代码
参数: 也叫临时变量, 类型 变量名
参数列表可以为空, 也可以多个, 多个参数之间用’,'隔开
有返回值的方法, 需要通过return返回结果
return表示方法结束, 没有返回值的方法, 也可以使用return
常用方法
Scanner
int nextInt(): 获取控制台内容, 并且转换成int值返回
double nextDouble(): 获取控制台内容,并且转换成double返回
String next(): 获取控制台字符串, 并返回(遇到回车或者空格读取结束)
String nextLine(): 获取控制台一整行字符串,并返回(遇到回车结束)一般放在第一行
System
void print(内容) -> 打印, 不换行
void println(空/内容) -> 打印完, 换行
Math
double random(): 返回一个[0,1)随机数
double pow(double d1, double d2): 返回 d1 的 d2 次幂
转义字符: \n:回车 \r:换行 \t:制表符 \:\本身
String:
char charAt(int index): 返回index索引位置对应的字符
Arrays:
String toString(数组): 将数组变成字符串格式返回
命名规则:
1.只能出现:英文 + 数字 + _ + $
2.不能以数字开头
3.变量名:可读性好、首字母小写、第二个单词开始首字母大写
4.包名:全部小写,域名倒写
www.baidu.com
com.baidu.zhidao.xx.xx
com.baidu.baike.xx.xx
5.方法名: 首字母小写、第二个单词开始首字母大写 - 驼峰命名法
长度不限, 但是一定要可读性好
例题
猜字母游戏
package com.hzt.java;
/**
* 猜字母游戏:
* 1.生成5个随机字母 -> 字符数组
* 2.猜字母 -> 控制台输入字符串, 转换成了字符数组
* 3.比较两个字符数组, 得到字符正确个数, 位置正确个数
* 4.如果没猜对, 继续重复2和3步
*/
import java.util.Scanner;
import static java.lang.Math.random;
public class Democaizimu {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
char r[] = new char[5];
char n[] = new char[5];
int c[] = new int[2];
String s;
r = randomsChars(); //生成5个随机字母
/* for (int i = 0; i < 5; i++) {
System.out.print(r[i]);
}*/
System.out.println("输入0退出游戏");
System.out.print("请输入五个字符:");
while (true) {
s = console.next();
if (s.equals("0")) {
System.out.println("退出游戏成功");
break;
}
n = parseChar(s);//输入5个字母并且转换为字符串
/* for(int i = 0; i < 5; i++){
System.out.print(n[i]);
}*/
c = compareStr(r, n);
System.out.println(c[1] + "个字母相同");
System.out.println("其中有" + c[0] + "个字母位置也相同");//比较两个字节组得出位置和字母都相同的字母数和相同的字母数
if (c[0] == 5) {
System.out.println("全部正确!");
break;
} else {
System.out.print("请重新输入5个字母:");
}
}
}
/**
* 目的: 得到一个长度为5的字符数组
* 随机的五个字母, 不重复
*/
public static char[] randomsChars() {
char[] letter = new char[5];
int i, j;
for (i = 0; i < 5; i++) {
letter[i] = (char) (Math.random() * 26 + 65);
for (j = 0; j < i; j++) {
if (letter[i] == letter[j]) {
i--;//如果相等则使i退回在重新生成一位随机字母与前面的字母比较
break;
}
}
}
return letter;
}
/**
* 目的: 为了将指定字符串转换成字符数组,并返回
*/
public static char[] parseChar(String a) {
Scanner console = new Scanner(System.in);
char[] n = new char[5];
n = a.toCharArray();
while (n.length != 5) {
System.out.print("字符数不对,请重新输入:");
a = console.next();
n = a.toCharArray();
}
return n;
}
/**
* 目的: 比较两个字符数组
* 返回两个结果, 分别是 字母正确个数和位置正确个数
* 两个结果放在一个变量中返回, 所以确定返回值类型是int[]
*/
public static int[] compareStr(char[] a, char[] b) {
int[] c = new int[2];
int i, j;
for (i = 0; i < a.length; i++) {
if (a[i] == b[i]) {
c[0]++;
}
for (j = 0; j < a.length; j++) {
if (a[i] == b[j]) {
c[1]++;
}
}
}
return c;
}
}