javase(2023/11/15)

1、null 和""区别

        //""和null区别
        String str1="";
        String Str2=null;
        //只要是空串,地址都为0
//        string = “” 方式,如果在jvm内存中存在相同值的数据将地址直接指向定义值;
//        new String() 的方式是在jvm直接创建一个对象并且将地址指向该对象
        System.out.println(str1.hashCode()); //0
        System.out.println("".hashCode()); //0
        //System.out.println(str2.hashCode()); //运行失败,应该是没这对象
//        System.out.println(str1.equals(str2));//同理
//        System.out.println(str1==str2);//同理

2、字符串格式化

//字符串格式化
        //-表示左对齐,20位占用位置大小,s表示对字符串格式化
        System.out.println(String.format("%-20s","z")+"ss");
        System.out.println(String.format("%-20s","0000000000000000")+"ss");

3、房屋租赁

package zhh.chapter08.houserent;

import zhh.chapter08.houserent.view.HouseView;

public class HouseRentApp {
    public static void main(String[] args) {
        new HouseView().mainView();
    }
}


package zhh.chapter08.houserent.utils;

import sun.security.krb5.SCDynamicStoreConfig;

import java.util.Scanner;

/**
 工具类的作用:
 处理各种情况的用户输入,并且能够按照程序员的需求,得到用户的控制台输入。
 */

public class Utility {
    private static Scanner scanner=new Scanner(System.in);

    /**
     * 功能: 键盘读取一个字符串
     * @param limit 读取的长度
     * @param blankReturn 如果为true ,表示 可以读空字符串。
     * 					  如果为false表示 不能读空字符串。
     *
     *	如果输入为空,或者输入大于limit的长度,就会提示重新输入。
     * @return
     */
    public static String readKeyBoard(int limit,boolean blankReturn){
        String line="";
        //scanner.hasNextLine(); //判断有无下一行输入,此外其本身也会进行一次键盘的输入
        while(scanner.hasNextLine()){
            line=scanner.nextLine();//返回跳过的行,即读取这一行

            if(line.length()==0){ //用户直接回车,
                if(blankReturn==true){
                    break;
                }else{
                    System.out.println("输入不能为空,请重新输入: ");
                    continue;
                }
            }

            if(line.length()>limit){//老师哪里还加了||line.length() < 1 有啥用????
                System.out.println("字符串位数应该在小于"+limit+"请重新输入: ");
                continue;
            }
            //剩下真正常情况
            break;

        }
        return line;
    }

    /**
     * 功能:读取键盘输入的一个菜单选项,值:1——6的范围
     * @return 1——5
     */
    public static char readMenuSelection(){
        char c;
        while (true){
            c=readKeyBoard(1,false).charAt(0);
            //if(c!='1'||c!='2'||c!='3'||c!='4'||c!='5'||c!='6'){//总为true
            if (c != '1' && c != '2' && c != '3' && c != '4' && c != '5' && c != '6') {
                System.out.println("应该输入1-6,请重新输入:");
            }else{
                break;
            }
        }
        return c;
    }

    /**
     * 功能:读取键盘输入的一个字符
     * @return 一个字符
     */
    public static char readChar(){

        return readKeyBoard(1,false).charAt(0);
    }

    /**
     * 功能:读取键盘输入的一个字符,如果直接按回车,则返回指定的默认值;否则返回输入的那个字符
     * @param defaultValue 指定的默认值
     * @return 默认值或输入的字符
     */
    public static char readChar(char defaultValue) {
        String str=readKeyBoard(1,true);
        return (str.length()==0)?defaultValue:str.charAt(0);
    }


    /**
     * 功能:读取键盘输入的整型,长度小于10位
     * @return 整数
     */
    public static int readInt(){
        int n;
        while(true){
            String str=readKeyBoard(10,false);
            try{
                n=Integer.parseInt(str);
                break;
            }catch (NumberFormatException e){
                System.out.println("数字输入错误,请重新输入: ");
            }
        }
        return n;
    }

    /**
     * 功能:读取键盘输入的 整数或默认值,如果直接回车,则返回默认值,否则返回输入的整数
     * @param defaultValue 指定的默认值
     * @return 整数或默认值
     */
    public static int readInt(int defaultValue){
        int n;
        String str=readKeyBoard(10,true);
        if(str.equals("")){
            return defaultValue;
        }
        while(true){
            try{
                n=Integer.parseInt(str);
                break;
            }catch (NumberFormatException e){
                System.out.println("输入数据有错,请重新输入: ");
            }
        }
        return n;
    }

    /**
     * 功能:读取键盘输入的指定长度的字符串
     * @param limit 限制的长度
     * @return 指定长度的字符串
     */
    public static String readString(int limit) {
        return readKeyBoard(limit, false);
    }

    /**
     * 功能:读取键盘输入的指定长度的字符串或默认值,如果直接回车,返回默认值,否则返回字符串
     * @param limit 限制的长度
     * @param defaultValue 指定的默认值
     * @return 指定长度的字符串
     */

    public static String readString(int limit, String defaultValue) {
        String str = readKeyBoard(limit, true);
        return str.equals("")? defaultValue : str;
    }

    /**
     * 功能:读取键盘输入的确认选项,Y或N
     * 将小的功能,封装到一个方法中.
     * @return Y或N
     */
    public static char readConfirmSelection(){
        char c;
        System.out.println("请输入选择(Y/N): ");  //y/n????
        while(true){
            String str=readKeyBoard(1,false).toUpperCase();
            c=str.charAt(0);
            if(c=='Y'||c=='N'){
                break;
            }else{
                System.out.println("输入选项有错,请重新输入: ");
            }
        }
        return c;
    }
}

package zhh.chapter08.houserent.domain;

/**
 * House的对象表示一个房屋信息
 */
public class House {
    //编号 房主 电话 地址 月租 状态(未出租/已出租
    private int id;
    private String name;
    private String phone;
    private String address;
    private int rent;
    private String state;

    public House() {
    }

    public House(int id, String name, String phone, String address, int rent, String state) {
        this.id = id;
        this.name = name;
        this.phone = phone;
        this.address = address;
        this.rent = rent;
        this.state = state;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public int getRent() {
        return rent;
    }

    public void setRent(int rent) {
        this.rent = rent;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    @Override
//    public String toString() {
//        return id +
//                "\t\t" + name +
//                "\t\t" + String.format("%-16s",phone) + address +
//                "\t\t" + rent +
//                "\t\t" + state ;
//    }
    public String toString() {
        return id +
                "\t\t" + name +
                "\t\t" + phone+
                "\t\t\t\t"+ address +
                "\t\t" + rent +
                "\t\t" + state ;
    }
}

package zhh.chapter08.houserent.service;

import zhh.chapter08.houserent.domain.House;
import zhh.chapter08.houserent.utils.Utility;

/**
 * HouseService.java<=>类 [业务层]
 * //定义House[] ,保存House对象
 * 1. 响应HouseView的调用
 * 2. 完成对房屋信息的各种操作(增删改查c[create]r[read]u[update]d[delete])
 */

public class HouseService {
    private House[] houses;
    private int houseNumber=1;
    private int idCounter=1;

    //构造方法的参数也可以不是本身的属性,其他都行?
    public HouseService(int size) {
        houses=new House[size];
        //房屋位置从0开始
        houses[0]=new House(1,"xx", "15811111111", "北京", 2000, "未出租");
    }

    /**
     * 添加新房源具体实现
     */
    public boolean add(House newHouse){
        //判断数组是否已满
        if(houseNumber==houses.length){
            System.out.println("数组已满,不能在存了");
            return false;
        }
        newHouse.setId(++idCounter);
        houses[houseNumber++]=newHouse;
        return true;
    }

    /**
     * 根据id删除新房源具体实现
     */
    public boolean del(int idDel){
        if(houseNumber==0){
            System.out.println("数组已空,不能再删除了!");
            return false;
        }

        //初始化删除房屋位置,对应下标
        int positionDel=-1;

        for(int i=0;i<houseNumber;i++){
            //判断对应位置是否相等
            //也可以判断对应id是否相等,idDel == houses[i].getId()
            if(i==idDel-1){
                positionDel=i;
            }
        }
        if(positionDel==-1){
            System.out.println("没有此id!");
            return false;
        }
        for(int i=positionDel;i<houseNumber;i++){
            houses[i]=houses[i+1];
        }
        //houses[houseNumber--]=null;错误
        //house实际最后一个房屋下标为houseNumber-1
        houses[--houseNumber]=null;
        return true;

    }

    /**
     * 根据id查找房源具体实现
     */
    public House findById(int findId){
        //逻辑复杂,下边的更好
//        //查找房屋位置,对应下标
//        int positionfind=-1;
//
//        if(findId>=1&&findId<=houseNumber){
//            positionfind=findId;
//        }
//        if(positionfind==-1){
//            System.out.println("没有此id!");
//            return null;
//        }
//        return houses[positionfind-1];
        for(int i = 0; i < houseNumber; i++) {
            if(findId == houses[i].getId()) {
                return houses[i];
            }
        }
        System.out.println("没有此id!");
        return null;
    }

//    /**
//     * 修改房屋信息具体实现
//     */
//    public boolean update(int id, String name, String phone, String address, int rent, String state){
//        House udHouse=findById(id);
        if(udHouse==null){
            return false;
        }else{
            udHouse.setName(name);
            udHouse.setPhone(phone);
            udHouse.setAddress(address);
            udHouse.setRent(rent);
            udHouse.setState(state);
            return true;
        }
//        udHouse.setName(name);
//        udHouse.setPhone(phone);
//        udHouse.setAddress(address);
//        udHouse.setRent(rent);
//        udHouse.setState(state);
//        return true;
//    }




    /**
     * 但返回房屋信息
     */
    public House[] list(){
        return houses;
    }
}

package zhh.chapter08.houserent.view;
/**
 * 界面实现
 */

import zhh.chapter08.houserent.domain.House;
import zhh.chapter08.houserent.service.HouseService;
import zhh.chapter08.houserent.utils.Utility;

public class HouseView {

    //循环退出标志
    boolean loop=true;

    //不在方法中时,用不了.var
    //暂定能保存10个房源
    private HouseService houseService=new HouseService(10);

    //默认id
    int defaultId=0;


    //6 退出
    public void exit(){
        char c=Utility.readConfirmSelection();
        if(c=='Y'){ //注意是大写,readConfirmSelection用了toUpperCase
            loop=false;
        }
    }

    //5 房 屋 列 表
    public void listHouse(){
        System.out.println("=========================房屋列表=========================");
        System.out.println("编号\t\t房主\t\t电话\t\t\t\t\t\t地址\t\t月租\t\t状态(未出租/已出租)");
        House[] houses=houseService.list();
        for(int i=0;i<houses.length;i++){
            if(houses[i]==null){
                break;
            }
            System.out.println(houses[i].toString());
        }
        System.out.println("========================房屋列表完成========================");
    }

    /**
     * 1 新 增 房 源
     */
    public void addHouse(){
        System.out.println("========================新增房源==========================");

        //应该把Utility.readString(8)单独抽离出来,方便调试
        //最后把属性一起通过构造方法赋给新对象
//        House newhouse = new House();
//        System.out.println("请输入姓名(8位以内): ");
//        newhouse.setName(Utility.readString(8));
//        System.out.println("请输入地址(6位以内): ");
//        newhouse.setAddress(Utility.readString(6));
//        System.out.println("请输入电话(3位以内): ");
//        newhouse.setPhone(Utility.readString(3));
//        System.out.println("请输入月租: ");
//        newhouse.setRent(Utility.readInt());
//        System.out.println("请输入状态(已出租/未出租): ");
//        newhouse.setState(Utility.readString(3,"未出租"));
        System.out.println("请输入姓名(8位以内,默认xxx): ");
        String name=Utility.readString(8,"xxx");
        System.out.println("请输入电话(11位以内,默认00000000000): ");
        String phone=Utility.readString(11,"00000000000");
        System.out.println("请输入地址(6位以内,默认中国): ");
        String address=Utility.readString(6,"中国");
        System.out.println("请输入月租(10位以内,默认1000): ");
        int rent=Utility.readInt(1000);
        System.out.println("请输入状态(已出租/未出租,默认未出租): ");
        String state=Utility.readString(3,"未出租");
        House newhouse = new House(defaultId, name, phone, address , rent, state);
        if(houseService.add(newhouse)){
            System.out.println("========================新增房源完成==========================");
        }else{
            System.out.println("========================新增房源失败==========================");
        }
    }

    /**
     * 3 删 除 房 源
     */
    public void delHouse(){
        System.out.println("========================删除房源==========================");
        System.out.print("请输入删除id: ");
        int iddel=Utility.readInt();

        //确认删除
        System.out.println("确定删除编号"+iddel+"对应房源吗?");
        char c=Utility.readConfirmSelection();
        if(c=='Y'){
            if(houseService.del(iddel)){
                System.out.println("=======================删除房源成功=========================");
            }else{
                System.out.println("=======================删除房源失败=========================");
            }
        }else{
            System.out.println("=======================放弃删除房源=========================");
        }
    }

    /**
     * 2 查 找 房 源
     */
    public void findHouse(){
        System.out.println("========================查找房源==========================");
        System.out.print("请输入查找id: ");
        int findId=Utility.readInt();
        House oldHouse=houseService.findById(findId);

        if(oldHouse!=null){
            System.out.println("编号\t\t房主\t\t电话\t\t\t\t\t\t地址\t\t月租\t\t状态(未出租/已出租)");
            System.out.println(oldHouse.toString());
        }else{
            System.out.println("=======================查找房源失败=========================");
        }
    }

    /**
     * 4 修改房屋信息
     */
    public void updateHouse(){
        System.out.println("=======================修改房源信息=========================");
        System.out.println("请输入待修改房屋编号(-1退出): ");
        int udId=Utility.readInt();
        if(udId==-1){
            System.out.println("=======================放弃修改房源=========================");
            return;
        }

        House udHouse=houseService.findById(udId);
        if(udHouse==null){
            System.out.println("没有此id!");
            System.out.println("======================修改房源信息失败========================");
            return;
        }

        //如果用户直接回车,表示不修改对应信息
        System.out.println("如果原信息无误,可以直接回车");

        System.out.print("姓名("+udHouse.getName()+"): ");
        String name=Utility.readString(8,"");
        if(!"".equals(name)){ //用==应该也ok
            udHouse.setName(name);
        }

        System.out.print("电话("+udHouse.getPhone()+"): ");
        String phone=Utility.readString(11,"");
        if(!"".equals(phone)){ //用==应该也ok
            udHouse.setPhone(phone);
        }

        System.out.print("地址("+udHouse.getAddress()+"): ");
        String address=Utility.readString(6,"");
        if(!"".equals(address)){ //用==应该也ok
            udHouse.setAddress(address);
        }

        System.out.print("月租("+udHouse.getRent()+"): ");
        int rent=Utility.readInt(-1);
        if(rent!=-1){ //用==应该也ok
            udHouse.setRent(rent);
        }

        System.out.print("状态("+udHouse.getState()+"): ");
        String state=Utility.readString(3,"");
        if(!"".equals(state)){ //用==应该也ok
            udHouse.setState(state);
        }
        System.out.println("=======================修改房源成功=========================");
    }

    //显示主菜单
    public void mainView(){
        do{
            System.out.println("-------------------------房屋出租系统-------------------------");
            System.out.println("\t\t\t\t1 新 增 房 源");
            System.out.println("\t\t\t\t2 查 找 房 源");
            System.out.println("\t\t\t\t3 删 除 房 源");
            System.out.println("\t\t\t\t4 修 改 房 屋 信 息");
            System.out.println("\t\t\t\t5 房 屋 列 表");
            System.out.println("\t\t\t\t6 退 出");

            char choice= Utility.readMenuSelection();
            switch (choice){
                //case 1:,System.out.println((int)'1')输出49,
                //'1'的ASCII码是49,输入'1'时,1当然不等于49,一直进不去
                case '1':
                    addHouse();
                    break;
                case '2':
                    findHouse();
                    break;
                case '3':
                    delHouse();
                    break;
                case '4':
                    updateHouse();
                    break;
                case '5':
                    listHouse();
                    break;
                case '6':
                    exit();
            }
        }while(loop);
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值