JavaMidExam

JavaMidExam

1.按以下要求编写程序:(30分)
(1) 定义一个坐标点类Point,包含两个成员变量横坐标x和纵坐标y,构造方法对x,y进行初始化;创建一个线段类,添加point1和point2两个成员变量(线段的两个端点),构造方法对其进行初始化。
(2) 在线段类中添加方法:设置两个点的位置以及计算线段的长度。
(3) 设计测试类进行测试,设置线段两个端点的位置,输出两个端点的坐标和线段的长度。(测试数据point1为(2,0),point2为(1,学号后两位))

package TestAll.MidExam;

/**
 * @author JMChen
 * @date 2020/5/9
 */

/**
 * 坐标类
 */
class Point {
    public double x, y;

    public Point(double x, double y) {
        this.x = x;
        this.y = y;
    }
}

/**
 * 线段类
 */
class Line {
    public Point point1, point2;

    //构造函数初始化
    public Line(Point a, Point b) {
        point1 = a;
        point2 = b;
    }

    //设置两个点的位置
    public Point setPoint1(double x, double y) {
        point1.x = x;
        point1.y = y;
        return point1;
    }

    public Point setPoint2(double x, double y) {
        point2.x = x;
        point2.y = y;
        return point2;
    }

    //计算线段长度
    public double getLength() {
        double len;
        len = Math.sqrt((point1.x - point2.x) * (point1.x - point2.x) + (point1.y - point2.y) * (point1.y - point2.y));
        return len;
    }
}

public class MainTestOne {
    public static void main(String[] args) {
        //设置两个点的坐标
        Point point1 = new Point(2, 0);
        Point point2 = new Point(1, 5);
        //打印出坐标信息
        System.out.println("point1的坐标是:" + "(" + point1.x + "," + point1.y + ")");
        System.out.println("point2的坐标是:" + "(" + point2.x + "," + point2.y + ")");
        //初始化线段端点坐标
        Line line = new Line(point1, point2);
        //打印线段长度
        System.out.printf("线段line的长度是:%.2f", line.getLength());
    }
}

2. 按以下要求编写程序:(30分)
现在要开发一个应用,模拟移动存储设备的读和写功能,即计算机与U盘、MP3、移动硬盘等移动设备进行数据交换。
要求:已知现在要实现计算机对U盘、MP3播放器、移动硬盘这三种移动存储设备的读和写功能,以后可能会有新的第三方的移动存储设备,所以计算机必须有扩展性,能与目前未知而以后可能会出现的存储设备进行数据交换。

package TestAll.MidExam;

/**
 * @author JMChen
 * @date 2020/5/9
 */
/**定义抽象类存储设备类,包含读写抽象方法*/
abstract class Storage {
    public abstract void read();
    public abstract void write();
}

/**定义U盘类继承自Storage*/
class UDisk extends Storage {
    //实现U盘的读操作
    public void read() {
        System.out.println("计算机正在使用U盘做读操作");
    }

    //实现U盘的写操作
    public void write() {
        System.out.println("计算机正在使用U盘做写操作");
    }
}

/**定义MP3类继承自Storage*/
class MP3 extends Storage {
    //实现MP3的读操作
    public void read() {
        System.out.println("计算机正在使用MP3做读操作");
    }

    //实现MP3的写操作
    public void write() {
        System.out.println("计算机正在使用MP3做写操作");
    }
}
/**定义移动硬盘类继承自Storage*/
class MobileHardDisk extends Storage {
    实现移动硬盘的读操作
    public void read() {
        System.out.println("计算机正在使用移动硬盘做读操作");
    }

    实现移动硬盘的写操作
    public void write() {
        System.out.println("计算机正在使用移动硬盘做写操作");
    }
}

/**定义计算机类*/
class Computer {
    //定义Storage类型的成员
    public Storage Device;
    public void useDevice(Storage Device)
    {
        this.Device = Device;
    }
    public void show()
    {
        Device.read();
        Device.write();
    }
}

public class MainTestTwo {
    public static void main(String args[]) {
        Computer computer = new Computer();
        //使用U盘
        Storage storage = new UDisk();
        computer.useDevice(storage);
        computer.show();

        //使用MP3
        storage =new MP3();
        computer.useDevice(storage);
        computer.show();

        //使用移动硬盘
        storage =new MobileHardDisk();
        computer.useDevice(storage);
        computer.show();

    }
}


3. 按以下要求编写程序:(40分)
输入一个字符串,字符串中有用户名,密码,日期三个分量组成,用&&分开,例如:username=chen && password=12345 && date=2009/10/21
分量内部不能有空格比如:username=chen中不能有空格,分量间可以有任意多的空格。
(1)请从字符串中提取用户名,密码和日期,并分别打印,比如:
String name=“chen”
String passwd=“12345”
String datetime=“2009/10/21”
(2)判断用户名是否满足规则:由英文字母开头,英文字母和数字组成
(提示:该规则的正则表达式为:1[a-zA-Z0-9]*$)
(3)判断密码是否满足规则:由数字组成,长度大于等于6,小于等于20
(提示:该规则的正则表达式为:[0-9]{6,20})
(4)转换日期格式为2009-10-21

package TestAll.MidExam;

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author JMChen
 * @date 2020/5/9
 */
public class MainTestThree {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入:");
        String str = sc.nextLine();

        char[] charmassage = str.toCharArray();
        String[] massage = new String[3];//将提取得信息放在一个字符串数组
        int i = 0,j =0 ;

        //提取信息
        for (j = 0; j < charmassage.length; j++) {
            if (charmassage[j] == '=') {
                int s = j;
                while (s < (str.length()) && charmassage[s] != ' ') s++;
                massage[i] = str.substring(j + 1, s);
                System.out.println(massage[i]);
                i++;
            }
        }
        //判断用户名是否符合规则
        String regex = "^[a-zA-Z][a-zA-Z0-9]*$";            //按这个规则匹配
        Pattern p = Pattern.compile(regex); //匹配的模式
        Matcher m = p.matcher(massage[0]);   //传入要匹配的原串
        if (m.find()) {
            System.out.println(m.group() + "用户名符合规则");
        } else System.out.println("用户名不符合规则");

        //判断密码是否符合规则
        String regex2 = "[0-9]{6,20}";          //按这个规则匹配
        p = Pattern.compile(regex2); //匹配的模式
        m = p.matcher(massage[1]);   //传入要匹配的原串
        if (m.find()) {
            System.out.println("密码符合规则");
        } else System.out.println("密码不符合规则");

        //格式化时间
        String time = massage[2].replaceAll("/", "-");
        System.out.println(time);
    }
}

感觉还有很多可以优化,当时写的比较急促,哎~~~~~~~
第二,三题其实做法有很多。。。。


  1. a-zA-Z ↩︎

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值