Java Day13

面向对象

接口的定义与实现 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;
    }
}

上一篇:day13 函数剩余


下一篇:Day13_面向对象 Object类