计算机实训课程第二天(2021.7.13)

学习收获:改进星星、正则表达、线程
1.面向对象

什么是面向对象?面向过程?

  • 类、对象、类定义、对象的创建、对象的使用

  • 成员变量、方法、方法的重载,构造方法、this关键字

  • 继承、方法的重写 //重写和重载的区别思考一下?

  • 多态、父类型的引用指向子类的对象

  • 动态绑定:多态+重写

  • 封装、访问修饰符:四种(用法)

  • 静态代码块

    static{
        代码;
    }
    //final
    //abstract
    //接口
    //内部类
    

**2.截取字符串 **

package cn.tude.api;

import jdk.nashorn.internal.objects.NativeString;

public class Demo01 {
    public static void main(String[] arge){
        String card="341302xxxxxxxx1834";
        //1.截取区域编码
        //2.截取出生年月
        //3.输出格式年月日
        //4.判断男女
        //substring()截取字符串中的元素,也可以是一段,中间用逗号隔开
        NativeString sb;
        System.out.println(card.substring(0,6));//截取区域编码
        System.out.println(card.substring(6,10) + "年" + card.substring(10,12)+ "月" +card.substring(12,14)+"日");//截取出生年月
        String a=card.substring(16,17);
        int b=Integer.parseInt(card.substring(16,17));//判断男女
        if (b%2==0)
            System.out.println("女");
        else{
            System.out.println("男");
        }
    }
}

效果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xg2J9ON7-1626223195007)(C:\Users\ALIENWARE\AppData\Roaming\Typora\typora-user-images\image-20210713110233540.png)]

正则表达式:

package cn.tude.api;

/**
 * javaweb
 * 工具 IDEA
 * 语言 java
 * 数据库 mysql/oracle/db2
 * 知识 java语法、API
 * HTLM+CSS+JS
 * maven搭建项目
 * 框架 SSM/springboot/spring/springmvc/mybatis/jquery/ajax/cookie/session/jsp/servlet/tomcat
 * 云服务器--阿里云等
 */

//正则表达式
public class Demo02 {
    public static void main(String[] args) {
        String str = "1234";
        //任意的四个数
        String regex = "[123456][1345][12345][5678]"; //结果为false
        System.out.println(str.matches(regex));
        regex="[0-9][0-9][0-9][0-9]";  //也可以表示为regex="[0-9]{4}";
        System.out.println(str.matches(regex));     //结果为ture
        String str1 = "123456789";
        regex="[0-9]{8,16}";  //表示为8-16位数字
        System.out.println(str1.matches(regex));     //结果为ture
        //转义字符\d转义为数字
        regex="\\d{8,16}";   //表示为8-16位数字
        System.out.println(str1.matches(regex));     //结果为ture

        //转义字符\D转义为非数字
        String str2 = "abcd;;;;;";
        regex="^\\D{8,16}$";
        System.out.println(str2.matches(regex));    //结果为ture
    }
}
package cn.tude.api;


//最少的5位字母
public class Demo03 {
    public static void main(String[] args) {
        String str ="zbcdQ";
        String regex = "^[a-zA-Z]{5,}$";
        System.out.println(str.matches(regex));   //ture

        //通配符* ? +
        //一位1-9的数字和一位a-z的组合,组合可以出现任意次数
        str = "1q2w3e4r";
        regex = "^([1-9][a-z])*$";
        System.out.println(str.matches(regex));  //ture
    }
}

对昨天星星的改进,增加移动和弹幕

package cn.tedu;

import javax.swing.JFrame;
class MyJFrame extends JFrame{
    //构造方法:方法名与类名相同,没有任何返回值类型
    //作用:初始化
    //导包快捷方式Ctrl+shift+O
    //代码提示alt+/
    public MyJFrame(){
        //设置窗体
        this.setTitle("满天星");
        //设置窗体宽高
        this.setSize(1600,800);
        this.setLocationRelativeTo(null);
        //优化以下,自动关闭进程
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //显示可见
        this.setVisible(true);
        MyJPanel mj=new MyJPanel();
        this.add(mj);
    }
    public static void main(String[] args){
        new MyJFrame();
    }
}
package cn.tedu;

import javax.swing.JPanel;
import java.awt.*;
import java.util.Random;

public class MyJPanel  extends JPanel implements Runnable{
    int[] x = new int[50];
    int[] y = new int[50];

    //全局变量
    int x1=160;
    int x2=1000;
    int x3=500;
    int x4=800;
    int y1=3;
    String[] strarr = {"233333","66666","99999","awsl","蚌埠住了","下次一定!"};


    //构造方法(用来初始化)
    public MyJPanel(){
        Random rand=new Random();//生成随机数
        for (int i=0;i<x.length;i++){
            x[i]= rand.nextInt(1600);
            y[i]= rand.nextInt(800);
        }
        //启动线程
        new Thread(this).start();
    }
    public void paint(Graphics g){
        super.paint(g);
        //画月亮
        g.setColor(Color.YELLOW);
        g.fillOval(100,100,150,150);//x,y坐标为左上角
        g.setColor(Color.BLACK);
        g.fillOval(x1,100,150,150);//遮盖形成月牙
        //画一颗星
        this.setBackground(Color.BLACK);
        for (int i=0;i<x.length;i++) {
            //随机颜色
            int red=(int)(Math.random()*256);
            int green=(int)(Math.random()*256);
            int blue=(int)(Math.random()*256);
            Color color=new Color(red,blue,green);
            g.setColor(color);
            Font font1=new Font("微软雅黑",Font.BOLD,60);
            g.setFont(font1);
            g.drawString("制作人:陈雪晨",x2,80);
            g.setFont(font1);
            int j=200;
            for (int a=0;a<strarr.length;a++) {
                g.drawString(strarr[a], x3+x4, j);
                j+=100;
            }
            g.setFont(font1);
            g.drawString("好好学习!",x4,600);
            g.setColor(color);
            Font font=new Font("微软雅黑",Font.BOLD,50);
            g.setFont(font);
            g.drawString("*", x[i], y[i]+y1);
            y[i]=y[i]+y1;
            if (y[i]>800){
                y[i]=1;
            }

        }
    }

    @Override
    public void run() {
        while (true){
            x1-=2;
            if (x1<0)
                x1=160;
            x2-=5;
            if (x2<0)
                x2=1000;
            x3-=10;
            if (x3<0)
                x3=500;
            x4-=7;
            if (x4<0)
                x4=800;
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            repaint();//重绘,重复使用paint方法
        }
    }
}

模拟售票:

package cn.tedu;

/**
 * 作者:陈二胖
 * 时间:2021/7/13  14:19
 * 目的:TODO  模拟售票
 */
public class Demo01 extends Thread{
    //现有10张票
    private int ticket=10;

    @Override
    public void run() {
        super.run();
        while (true){
            if (ticket<=0){
                break;
            }
            System.out.println("线程:" + Thread.currentThread().getName() + "剩余的票" + ticket--);
        }
    }

    public static void main(String[] args) {
        //创建线程(三个售票窗口)
        Demo01 obj1 = new Demo01();
        Demo01 obj2 = new Demo01();
        Demo01 obj3 = new Demo01();
        Thread thread1=new Thread(obj1,"窗口1");
        Thread thread2=new Thread(obj2,"窗口2");
        Thread thread3=new Thread(obj3,"窗口3");
        //启动线程
        thread1.start();
        thread2.start();
        thread3.start();
    }
}
package cn.tedu;

/**
 * 作者:陈二胖
 * 时间:2021/7/13  14:41
 * 目的:TODO 线程的实现方法2
 */
public class Demo02 implements Runnable{
    //现有10张票
    private int ticket=10;

    @Override
    public void run() {
        while (true){
            if (ticket <= 0){
                break;
            }
            //时间缓冲
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("线程:" + Thread.currentThread().getName() + "剩余的票" + ticket--);
        }
    }

    public static void main(String[] args) {
        Demo02 obj = new Demo02();
        Thread t1 = new Thread(obj,"窗口1");
        Thread t2 = new Thread(obj,"窗口2");
        Thread t3 = new Thread(obj,"窗口3");
        t1.start();
        t2.start();
        t3.start();
    }
}
package cn.tedu;

/**
 * 作者:陈二胖
 * 时间:2021/7/13  15:11
 * 目的:TODO  线程的实现方法3
 */
public class Demo03 extends Thread {
    //现有10张票
    private int ticket = 20;

    @Override
    public void run() {
        while (true) {
            synchronized (this){//对象锁
                if (ticket <= 0) {
                    break;
                }
                //时间缓冲
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("线程:" + Thread.currentThread().getName() + "剩余的票" + ticket--);
            }
        }
    }

    public static void main(String[] args) {
        //目标线程
        Thread obj = new Demo03();
        for (int i=0;i<3;i++){
            new Thread(obj).start();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值