会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132440个问题

老师,我的Users  类如下:


import java.util.Objects;

public class Users implements Comparable<Users>{
  private String usersname;
  private int  usersage;

    public Users(String yanggege, String s) {
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Users users = (Users) o;
        return usersage == users.usersage &&
                Objects.equals(usersname, users.usersname);
    }

    @Override
    public int hashCode() {
        return Objects.hash(usersname, usersage);
    }

    public Users(String usersname, int usersage) {
        this.usersname = usersname;
        this.usersage = usersage;
    }

    public String getUsersname() {
        return usersname;
    }

    public void setUsersname(String usersname) {
        this.usersname = usersname;
    }

    public int getUsersage() {
        return usersage;
    }

    public void setUsersage(int usersage) {
        this.usersage = usersage;
    }

    @Override
    public String toString() {
        return "Users{" +
                "usersname='" + usersname + '\'' +
                ", usersage=" + usersage +
                '}';
    }

    @Override
    public int compareTo(Users o) {
        if (this.usersage>o.getUsersage()){
            return 1;
        }
        if (this.usersname==o.getUsersname()){
            return this.usersname.compareTo(o.usersname);
        }
        return -1;
    }
}

TreeMap 代码:

 import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;

public class TreeMapTset {
    public static void main(String[] args) {

        //实例化RreeMap
        Map<Users,String> map=new TreeMap<>();
         Users u1=new Users("杨明","24");
         Users u2=new Users("李飞","19");
         Users u3=new Users("张哥","10");
         Users u4=new Users("陈飞信","55");
         map.put(u1,"杨明");
         map.put(u2,"zangxiao");
         map.put(u3,"sixiaozi");
         map.put(u4,"lixiaozo");
         Set<Users> set=map.keySet();
         for (Users str:set){
            System.out.println(str+"====="+map.get(str));
         }

    }


}

输出:请问下是哪里错了。

image.png

JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 2386楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/异常机制 2388楼

2020 12 11-----------------

package com.bjsxt;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * 核心业务类
 */
public class Operate {
    private List<Person> list;

    public Operate() {
        this.list = new ArrayList<>();
    }

    /**
     * 用户添加记录业务逻辑控制
     */
    public void addLogic() { //logic:逻辑
        Menu menu = new Menu();
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        while (true) {
            menu.addMenu();             //添加界面
            int item = telNoteRegex.menuItemValidate(1, 3);
            switch (item) {
                case 1:
                    this.addOperation();//添加新记录
                    break;
                case 2:
                    this.showAll();     //查看全记录
                    break;
                case 3:
                    return;             //返回上一级
            }
        }
    }

    /**
     * 用户查询记录业务逻辑控制
     */
    public void searchLogic() {
        Menu menu = new Menu();
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        while (true) {
            menu.searchMenu();              //查找界面
            int item = telNoteRegex.menuItemValidate(1, 7);
            switch (item) {
                case 1:
                    this.searchByName();    //按姓名查找
                    break;
                case 2:
                    this.searchByAge();     //按年龄查找
                    break;
                case 3:
                    this.searchBySex();     //按性别查找
                    break;
                case 4:
                    this.searchByTelNum();  //按电话号码查找
                    break;
                case 5:
                    this.searchByAdd();     //按住址查找
                    break;
                case 6:
                    this.showAll();         //查看全部记录
                    break;
                case 7:                     //返回上一级
                    return;
            }
        }
    }

    /**
     * 修改记录业务逻辑控制
     */
    public void modifyLogic() {
        Menu menu = new Menu();
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        while (true) {
            menu.modifyMenu();              //修改界面
            int item = telNoteRegex.menuItemValidate(1, 3);
            switch (item) {
                case 1:
                    this.showAll();         //查看全部记录
                    break;
                case 2:
                    this.modifyOperation(); //修改指定记录
                    break;
                case 3:
                    return;                 //返回上一级
            }
        }
    }

    /**
     * 删除记录业务逻辑控制
     */
    public void deleteLogic() {
        Menu menu = new Menu();
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        while (true) {
            menu.deleteMenu();                  //修改界面
            int item = telNoteRegex.menuItemValidate(1, 4);
            switch (item) {
                case 1:
                    this.showAll();             //查看全部记录
                    break;
                case 2:
                    this.deleteOperation();     //删除指定记录
                    break;
                case 3:
                    this.deleteAllOperation();  //删除全部记录
                    break;
                case 4:
                    return;                     //返回上一级
            }
        }
    }

    /**
     * 排序记录业务逻辑控制
     */
    public void orderLogic() { //order:顺序、规则
        Menu menu = new Menu();
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        while (true) {
            menu.orderMenu();           //排序界面
            int item = telNoteRegex.menuItemValidate(1, 5);
            switch (item) {
                case 1:
                    this.orderName();   //按名字排序
                    break;
                case 2:
                    this.orderAge();    //按年龄排序
                    break;
                case 3:
                    this.orderSex();    //按性别排序
                    break;
                case 4:
                    this.showAll();     //查看全部记录
                    break;
                case 5:
                    return;             //返回上一级
            }
        }
    }

    /**
     * 添加新记录信息
     */
    public void addOperation() {    //operation:操作
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        String name = telNoteRegex.nameValidate();
        String age = telNoteRegex.ageValidate();
        String sex = telNoteRegex.sexValidate();
        String telNum = telNoteRegex.telNumValidate();
        String address = telNoteRegex.addressValidate();
        Person person = new Person(name, age, sex, telNum, address);
        this.list.add(person);
        person.setId(this.list.size());
    }

    /**
     * 查询全部记录
     */
    public void showAll() { //show:显示
        if (this.list.size() == 0) {
            System.out.println("没有任何记录");
            return;
        }
        for (int i = 0; i < this.list.size(); i++) {
            System.out.println(this.list.get(i));
        }
    }

    /**
     * 按姓名查询记录
     */
    public void searchByName() { //by:由,按照
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        String name = telNoteRegex.nameValidate();
        boolean flag = true;
        for (int i = 0; i < this.list.size(); i++) {
            if (name.equals(this.list.get(i).getName())) {
                System.out.println(this.list.get(i));
                flag = false;
            }
        }
        if (flag) {
            System.out.println("没有此人记录");
        }
    }

    /**
     * 按年龄查询记录
     */
    public void searchByAge() {
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        String age = telNoteRegex.ageValidate();
        boolean flag = true;
        for (int i = 0; i < this.list.size(); i++) {
            if (age.equals(this.list.get(i).getAge())) {
                System.out.println(this.list.get(i));
                flag = false;
            }
        }
        if (flag) {
            System.out.println("没有此人记录");
        }
    }

    /**
     * 按性别查询记录
     */
    public void searchBySex() {
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        String sex = telNoteRegex.sexValidate();
        boolean flag = true;
        for (int i = 0; i < this.list.size(); i++) {
            if (sex.equalsIgnoreCase(this.list.get(i).getSex())) {
                System.out.println(this.list.get(i));
                flag = false;
            }
        }
        if (flag) {
            System.out.println("没有此人记录");
        }
    }

    /**
     * 按电话号码查询记录
     */
    public void searchByTelNum() {
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        String telNum = telNoteRegex.telNumValidate();
        boolean flag = true;
        for (int i = 0; i < this.list.size(); i++) {
            if (telNum.equals(this.list.get(i).getTelNum())) {
                System.out.println(this.list.get(i));
                flag = false;
            }
        }
        if (flag) {
            System.out.println("没有此人记录");
        }
    }

    /**
     * 按地址查询记录
     */
    public void searchByAdd() {
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        String address = telNoteRegex.addressValidate();
        boolean flag = true;
        for (int i = 0; i < this.list.size(); i++) {
            if (address.equals(this.list.get(i).getAddress())) {
                System.out.println(this.list.get(i));
                flag = false;
            }
        }
        if (flag) {
            System.out.println("没有此人记录");
        }
    }

    /**
     * 修改指定记录
     */
    public void modifyOperation() {
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        Menu menu = new Menu();
        //对被修改的记录的序号进行验证,可以使用对菜单项验证的方法来完成
        System.out.println("请输入记录的序号");
        int itemNum = telNoteRegex.menuItemValidate(1, this.list.size());
        menu.subModifyMenu();
        int menuItem = telNoteRegex.menuItemValidate(1, 6);
        switch (menuItem) {
            case 1:
                String name = telNoteRegex.nameValidate();
                (this.list.get(itemNum - 1)).setName(name);
                break;
            case 2:
                String age = telNoteRegex.ageValidate();
                (this.list.get(itemNum - 1)).setAge(age);
                break;
            case 3:
                String sex = telNoteRegex.sexValidate();
                (this.list.get(itemNum - 1)).setSex(sex);
                break;
            case 4:
                String telNum = telNoteRegex.telNumValidate();
                (this.list.get(itemNum - 1)).setTelNum(telNum);
                break;
            case 5:
                String address = telNoteRegex.addressValidate();
                (this.list.get(itemNum - 1)).setAddress(address);
                break;
            case 6:
                return;

        }
    }

    /**
     * 删除指定记录
     */
    public void deleteOperation() {
        TelNoteRegex telNoteRegex = new TelNoteRegex();
        System.out.println("请输入记录序号");
        int itemNum = telNoteRegex.menuItemValidate(1, this.list.size());
        this.list.remove(itemNum - 1);
        //重新为记录设置新的序号
        for (int i = 0; i < this.list.size(); i++) {
            (this.list.get(i)).setId(i + 1);
        }
        System.out.println("删除成功!请继续操作!");
    }

    /**
     * 删除全部记录
     */
    public void deleteAllOperation() {
        this.list.clear();
        System.out.println("电话中的记录已清空,请继续操作!");
    }

    /**
     * 按用户姓名排序记录
     */
    public void orderName() { //order:规则,顺序
        Collections.sort(this.list, new OrderByName());
        for (int i = 0; i < this.list.size(); i++) {
            (this.list.get(i)).setId(i + 1);
        }
    }

    /**
     * 按用户年龄排序记录
     */
    public void orderAge() {
        Collections.sort(this.list, new OrderByAge());
        for (int i = 0; i < this.list.size(); i++) {
            (this.list.get(i)).setId(i + 1);
        }
    }

    /**
     * 按用户性别排序记录
     */
    public void orderSex() {
        Collections.sort(this.list, new OrderBySex());
        for (int i = 0; i < this.list.size(); i++) {
            (this.list.get(i)).setId(i + 1);
        }
    }

    /**
     * 按姓名排序的比较器
     */
    class OrderByName implements Comparator<Person> {
        @Override
        public int compare(Person o1, Person o2) {
            return o1.getName().compareTo(o2.getName());
        }
    }

    /**
     * 按年龄排序的比较器
     */
    class OrderByAge implements Comparator<Person> {
        @Override
        public int compare(Person o1, Person o2) {
            return o1.getAge().compareTo(o2.getAge());
        }
    }

    /**
     * 按性别排序的比较器
     */
    class OrderBySex implements Comparator<Person> {
        @Override
        public int compare(Person o1, Person o2) {
            return o1.getSex().compareTo(o2.getSex());
        }
    }


}

添加新记录中信息中

person.setId(this.list.size());
这个方法可以改成用getId 方法吗,要怎么使用?

JAVA 全系列/第二阶段:JAVA 基础深化和提高/智能电话本项目实战 2390楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/智能电话本项目实战 2391楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/数据结构 2392楼

2020 12 10---------

package com.bjsxt;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 基于树形结构实现元素存储的容器
 */
public class MyTree<E> {
    private Map<E, E> map = new HashMap<>();//String--->String
    private Map<E, List<E>> map2 = new HashMap<>();//String ---->List

    /**
     * 向容器中添加元素
     */
    public void add(E parent, E item) {
        //完成在单结点之间的映射
        this.map.put(item, parent);
        //完成多结点之间的映射
        List<E> list = this.map2.get(parent);
        //判断当前结点下是否含有子结点,如果没有则创建一个新的List
        if (list == null) {
            list = new ArrayList<>();
            this.map2.put(parent, list);
        }
        list.add(item);
    }

    /**
     * 获取当前结点的父结点
     */
    public E getParent(E item) {
        return this.map.get(item);
    }

    /**
     * 获取当前结点的子结点
     */
    public List<E> getChild(E item) {
        return this.map2.get(item);
    }

    /**
     * 获取当前结点的兄弟结点
     */
    public List<E> getBrother(E item) {
        //获取当前结点的父结点
        E parent = this.getParent(item);
        //获取当前父结点的所有的子结点
        List<E> list = this.getChild(parent);
        List<E> brother = new ArrayList<>();
        if (list != null) {
            brother.addAll(list);
            brother.remove(item);
        }
        return brother;
    }

    /**
     * 获取当前结点的祖先结点
     */
    public List<E> getForefathers(E item) {
        //获取当前结点的父结点
        E parent = this.getParent(item);
        //结束递归的边界条件
        if (parent == null) {
            return new ArrayList<>();
        }
        //递归调用,再次获取当前结点父结点的父结点
        List<E> list = this.getForefathers(parent);
        //将递归到的所有结点元素添加到返回的List中
        list.add(parent);
        return list;
    }

    /**
     * 获取当前结点的子孙结点
     */
    public List<E> getGrandChildren(E item) {
        //存放所有子孙结点中的元素
        List<E> list = new ArrayList<>();
        //获取当前结点的子结点
        List<E> child = this.getChild(item);
        //结束递归的边界条件
        if (child == null) {
            return list;
        }
        //遍历子结点
        for (int i = 0; i < child.size(); i++) {
            //获取节点中的元素
            E ele = child.get(i);
            List<E> temp = this.getGrandChildren(ele);
            list.add(ele);
            list.addAll(temp);
        }
        return list;
    }

    public static void main(String[] args) {
        //实例化容器
        MyTree<String> myTree = new MyTree<>();
        //添加元素
        myTree.add("root", "生物");
        myTree.add("生物", "植物");
        myTree.add("生物", "动物");
        myTree.add("生物", "菌类");
        myTree.add("动物", "脊椎动物");
        myTree.add("动物", "脊索动物");
        myTree.add("动物", "腔肠动物");
        myTree.add("脊椎动物", "哺乳动物");
        myTree.add("脊椎动物", "鱼类");
        myTree.add("哺乳动物", "猫");
        myTree.add("哺乳动物", "牛");
        myTree.add("哺乳动物", "人");
        System.out.println("---------获取父结点---------");
        String parent = myTree.getParent("鱼类");
        System.out.println(parent);
        System.out.println("---------获取子结点---------");
        List<String> child = myTree.getChild("动物");
        for (int i = 0; i < child.size(); i++) {
            System.out.println(child.get(i));
        }
        System.out.println("---------获取兄弟结点---------");
        List<String> brother = myTree.getBrother("脊椎动物");
        for (int i = 0; i < brother.size(); i++) {
            System.out.println(brother.get(i));
        }
        System.out.println("---------获取祖先结点---------");
        List<String> foreFathers = myTree.getForefathers("人");
        for (int i = 0; i < foreFathers.size(); i++) {
            System.out.println(foreFathers.get(i));
        }
        System.out.println("---------获取子孙结点---------");
        List<String> grandChildren = myTree.getGrandChildren("root");
        for (int i = 0; i < grandChildren.size(); i++) {
            System.out.println(grandChildren.get(i));
        }

    }
}

获取当前节点的祖先节点中 为什么要return new ArrayList<>();    里面老师说相当于用一个容器把递归的元素装起来然后返回,不用容器可以吗?

JAVA 全系列/第二阶段:JAVA 基础深化和提高/数据结构 2393楼

问题:无法读取schema文档。

说明:老师,我的xml文件和xsd文件都是按照视频里讲述的编写的,两个文件也都放在了项目根目录下,但是在引入xsd文件的时候仍然报错。我的文件按照视频写过好几个版本了,文件位置也放到src目录下试过,都没有解决。烦请帮忙给解答一下,谢谢。

系统错误信息:

图片.png


图片.png


文件内容:

1、book.xml

<?xml version="1.0" encoding="UTF-8"?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="{book.xsd}">
    <book id="1001">
        <name>一路向北</name>
        <author>一路</author>
        <price>98.6</price>
    </book>
    <book>
        <name>未来可期</name>
        <author>不告诉你</author>
        <price>99.9</price>
    </book>
</books>

2、book.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="books">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="book" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="name" type="xs:string"></xs:element>
                            <xs:element name="author" type="xs:string"></xs:element>
                            <xs:element name="price" type="xs:double"></xs:element>
                        </xs:sequence>
                        <xs:attribute name="id" type="xs:positiveInteger"></xs:attribute>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>


JAVA 全系列/第二阶段:JAVA 基础深化和提高/XML 技术(旧) 2395楼

代码1:

package com.ljp.sleep_yield_join_stop;

public class MyThread implements Runnable {

    @Override
    public void run() {
//        synchronized (this) {
            for (int i = 0; i < 10; i++) {
                System.out.println(Thread.currentThread().getName() + "-------------" + i);

        }
    }
}

代码2:

package com.ljp.sleep_yield_join_stop;

public class Test {
    public static void main(String[] args) {
        MyThread mtd = new MyThread();
        Thread t01 = new Thread(mtd, "整天都吃橘子!!!");
        Thread t02 = new Thread(mtd,"想吃肉夹馍!!!");
        t01.start();
        t02.start();
        for(int i=0;i<10;i++){
            if(i==3){
                try {
                    t01.join();
//                    t02.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(Thread.currentThread().getName() + "*********" + i);
        }
    }
}

老师,是不是可以这么理解:只要是在哪个线程(比如主线程)里调用join(),那这个线程(主线程)阻塞,等其他线程运行完以后,这个线程再运行。那再这个线程(主线程)里,谁调用join()都可以,比如代码里t01也可以,t02也可以,感觉他们效果都是一样的;两个同时调用join(),感觉效果也是一样的,t01和t02并没有先后顺序,作用只是将主线程阻塞了而已。

JAVA 全系列/第二阶段:JAVA 基础深化和提高/多线程技术(旧) 2399楼

this.size++报错哪里出问题了
/*
* 基于双向链表实现元素存储的容器
* */
public class MyDoublyLinkedList<E> implements MyList<E> {

    /*
    * 定义双向链表的节点对象
    * */
    class Node<E>{
         E item;
         Node<E> prev;      //记录前一个节点对象
         Node<E> next;      // 记录下一个节点对象
         Node(Node<E> prev,E item,Node<E> next){
             this.prev = prev;
             this.item = item;
             this.next = next;
         }
    }
    private  Node head;   //记录头节点
    private  Node tail;   //记录尾节点
    private  Node size;   //记录原元素个数

    /*
    * 向双向链表中添加元素的方法
    * */
    @Override
    public void add(E element) {
        this.linkLast(element);
    }

    /*
    * 将节点对象添加到双向链表尾部
    * */
    private void linkLast(E element){
        //获取尾节点
        Node t = this.tail;
        //创建节点对象
        Node<E> node = new Node<>(t,element,null);
        //将新节点定义为尾节点
        this.tail = node;
        if(t == null){
            this.head = node;
        }else{
            t.next = node;
        }
        this.size++
    }

    /*
    * 根据指定位置获取元素
    * */
    @Override
    public E get(int indxe) {
        return null;
    }

    /*
    * 返回元素个数
    * */
    @Override
    public int size() {
        return 0;
    }

    /*
    * 根据指定位置删除元素*/
    @Override
    public E remove(int index) {
        return null;
    }

    public static void main(String[] args) {

    }
}

image.png

JAVA 全系列/第二阶段:JAVA 基础深化和提高/数据结构 2400楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637