面向对象
接口的定义与实现 interface
作用:
1. 约束
2. 定义一些方法,让不同的人实现
3. public abstract
4. public static final
5. 接口不能被实例化~ 接口中没有构造方法
6. implements可以实现多个接口
7. 必须要重写接口中的方法
// 抽象类: extends
//类 可以实现接口 implements 接口
//实现了接口中的类,就需要重写接口中的方法~
//多继承~利用接口实现多继承
public class UserServiceImpl implements UserService,TimeService{
@Override
public void add(String name) {
}
@Override
public void delete(String name) {
}
@Override
public void update(String name) {
}
@Override
public void query(String name) {
}
@Override
public void timer() {
}
}
//interface 定义的关键字,接口都需要有实现类
public interface UserService {
//接口中的所有定义的方法其实都是抽象的 public abstract
void add(String name);
void delete(String name);
void update(String name);
void query(String name);
}
public interface TimeService {
void timer();
}
方法练习
import java.util.Arrays;
import java.util.Scanner;
/**
* 猜字母:
* 游戏规则:程序随机产生5个按照一定顺序排列的字符作为猜测的结果,
* 由玩家来猜测此字符串。玩家可以猜测多次,每猜测一次,则由系统提示结果。
* (1)如果猜测的完全正确,则游戏结束,计算玩家的游戏得分并输出;
* (2)如果没有猜对,则提示猜测的结果(猜对了几个字符,几个字符的位置正确)
* (3)游戏得分规则:字符的个数乘以100为总分,即此游戏的总分为500分,
* 玩家如果第一次就猜对,则得满分(500分);每多猜测一次,则扣10分。
* (4)玩家在控制台录入exit,则游戏结束。
* <p>
* 分析:
* 1.生成随机的字符(不重复)
* 2.玩家输入(循环)
* 3.进行比较
*/
public class Game {
public static void main(String[] args) {
//记录猜测的次数
int count = 0;
//记录用户输入的字符
char[] input = null;
//存储随机生成的字符
char[] chs = null;
//存储比较的结果
int[] result = new int[2];
Scanner scanner = new Scanner(System.in);
System.out.println("欢迎来到猜字符游戏~~~(欢迎个鬼,面对疾风吧~~哈撒给~)");
//生成随机字符
chs = myRandom();
System.out.println("外挂开启成功" + Arrays.toString(chs));
System.out.println("游戏开始>>请输入您所猜测的5个字符序列(EXIT--退出)");
while (true) {
//trim()截取两边的空白
//toUpperCase()将字符转换为大写
String inputStr = scanner.next().trim().toUpperCase();
if ("EXIT".equals(inputStr)) {
System.out.println("失败!");
break;
}
//如果不是退出,则将字符转换为字符数组
input = inputStr.toCharArray();
//调用检查方法,比较结果
result = check(chs, input);
if (result[1] == chs.length) { //表示完全猜对
int score = 100 * chs.length - count * 10;
System.out.println("胜利!全部正确!你的得分是:" + score + "分");
break;
} else {
count++;
System.out.println("你猜对了"+result[0]+"个字符,位置正确的有"+result[1]+"个");
}
}
}
/**
* 随机生成字符数组
* 1)可以通过生成随机数当做下标获取字符,
* 应考虑如何避免取出的字符重复
* 2)为了避免取出的字符重复,可以设置开关来解决.
*
* @return
*/
public static char[] myRandom() {
char[] x = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',};
//声明一个开关数组,用来避免随机生成的字符重复
boolean[] flags = new boolean[x.length];
//存储随机生成的字符
char[] chs = new char[5];
for (int i = 0; i < chs.length; i++) {
int index;
do {
index = (int) (Math.random() * x.length);
} while (flags[index]);
chs[i] = x[index];
flags[index] = true;
}
return chs;
}
/**
* 比较玩家输入的字符序列和程序生成的字符序列,
* 逐一比较字符及位置,并记录结果
*
* @param chs 程序生成的字符序列
* @param input 玩家输入的字符序列
* @return result 存储比较的结果,返回值类型是int数组,下标为0的表示猜对的字符个数,
* 下标为1的表示位置正确的字符个数
*/
public static int[] check(char[] chs, char[] input) {
int[] result = new int[2];
for (int i = 0; i < input.length; i++) {
for (int j = 0; j < chs.length; j++) {
//
if (chs[j] == input[j]) {
result[0]++;
}
if (i == j) {
result[1]++;
break;
}
}
}
return result;
}
}