老师,这个写法是不是实例化对象的简便写法啊
public int menuItemValidate(int min, int max){ Scanner scanner = new Scanner(System.in); while(true){ System.out.println("请输入正确的数字,最小是:"+min+"\t最大是:"+max); int inputNum = scanner.nextInt(); if(inputNum >= min && inputNum <= max){ return inputNum; }else{ System.out.println("输入错误,请检查!"); } }
老师这个可以不用正则表达式吧,这样是不是也可以限定1-7
老师,这俩段代码可以调换位置嘛,麻烦详细点
。。。。。。。。。。。。。老师,我咋没有Diagrams嘞?
老师,视频里的查询修改删除代码都没有判断有没有记录,我增加了一个判断,这样return之后不会运行下面的语句返回到主菜单,
// 用户查询记录业务逻辑控制 public void searchLogic() { // 先判断是否有记录 if(this.list.size() == 0){ System.out.println("没有记录,请先添加记录!"); return; } 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() { // 先判断是否有记录 listHave(); 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; } } } // 判断list集合是否有记录 public void listHave(){ if(this.list.size() == 0){ System.out.println("没有记录,请先添加记录!"); return; } }
老师,视频里的查询修改删除代码都没有判断有没有记录,我增加了一个判断,这样return之后不会运行下面的语句返回到主菜单,但是如果我把这个判断的代码封装到一个方法里listHave(),那么输出没有记录请添加之后,下面的代码依旧会运行,这是什么?如果我封装成方法,应该怎么做?
两次代码运行结果如下:
老师我在判断list是否有元素时写成了
if(list == null){ System.out.println("没有任何记录") }
下面的打印语句不会被输出,我的理解是list == null 表示是是否有list这个集合,而不是判断他是否有元素。是这样的吗?
老师我有两个问题:
问题1:我看每个方法中都new了Menu和TelNoteRegex对象,那我能不能在Operate类中直接创建两个成员变量
Menu menu = new Menu(); TelNoteRegex telNoteRegex = TelNoteRegex,然后在方法直接使用menu和telNoteRegex调用他们的相关方法
问题2:我对retuen有点不太理解,代码如下:
public class Operate { private List<Person> list; public Operate() { this.list = new ArrayList<>(); } // 用户添加记录业务逻辑控制 public void addLogic() { 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 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: // 修改指定记录 // 进入修改记录的三级子界面 menu.subModifyMenu(); int input = telNoteRegex.menuItemValidate(1, 6); // 根据选项进入相应操作 switch(input){ case 1: break; case 2: break; case 3: break; case 4: break; case 5: break; case 6: break; case 7: return; } break; case 3: return; } } } } public class App { /** * 启动电话本项目 * @param args */ public static void main(String[] args){ App app = new App(); app.start(); } /** * 控制主菜单 */ public void start(){ Menu menu = new Menu(); TelNoteRegex telNoteRegex = new TelNoteRegex(); Operate operate = new Operate(); while(true) { menu.mainMenu(); int item = telNoteRegex.menuItemValidate(1, 6); switch(item){ case 1: // 添加 operate.addLogic(); break; case 2: // 查询 operate.searchLogic(); break; case 3: // 修改 operate.modifyLogic(); break; case 4: // 删除 operate.deleteLogic(); break; case 5: // 排序 operate.orderLogic(); break; case 6: System.exit(0); // 退出程序 } } } }
为什么modifyLogic()方法中内部的switch语句的case 7 : return是返回到了modifyLogic()方法中的while循环中,而外部的switch语句的 case 3: teturn 是返回到了App类中while循环?
运行结果:
老师,在这个例子里面,给两个不同的类的方法都加上锁,和不加锁,输出的结果都是正常的。那么这个加锁的方式有什么其他的作用呢?还是说在以后的开发当中会用到?
啥叫可变参数?感觉好像从来没听说过。。也可能是我忘了
老师,请问反射机制在接下来什么章节会使用比较多?
class A implements Runnable{ @Override public void run() { Thread t = new Thread(new B()); t.start(); for (int i = 0; i < 10; i++) { System.out.println(Thread.currentThread().getName() + " " + i); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } class B implements Runnable{ @Override public void run() { for (int i = 0; i < 20; i++) { System.out.println(Thread.currentThread().getName() + " " + i); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } public class JoinThread { public static void main(String[] args) { Thread t = new Thread(new A()); //Thread t1 = new Thread(new B()); t.start(); //t1.start(); for (int i = 0; i < 10; i++) { System.out.println(Thread.currentThread().getName() + " " + i); if (i == 2){ try { t.join(); } catch (InterruptedException e) { e.printStackTrace(); } } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }
Thread-0 0
Thread-1 0
main 0
main 1
Thread-0 1
Thread-1 1
Thread-1 2
Thread-0 2
main 2
Thread-1 3
Thread-0 3
Thread-1 4
Thread-0 4
Thread-0 5
Thread-1 5
Thread-0 6
Thread-1 6
Thread-1 7
Thread-0 7
Thread-0 8
Thread-1 8
Thread-1 9
Thread-0 9
Thread-1 10
Thread-1 11
main 3
Thread-1 12
main 4
main 5
Thread-1 13
main 6
Thread-1 14
Thread-1 15
main 7
Thread-1 16
main 8
Thread-1 17
main 9
Thread-1 18
Thread-1 19
老师,我在线程A里面运行线程B,然后再主线程里面联合线程A,我觉得结果应该是,主线程和A线程交替运行到联合的地方,然后线程A和线程B交替运行,再运行完主线程。可是为什么结果是上面这样子
老师这是我在网上搜的限定String是汉字、数字和字母的正则表达式
String regex = "^[a-z0-9A-Z\u4e00-\u9fa5]+$";
您可以帮忙解释一下这里的^ $是什么作用吗?
这是我根据网上搜到的写的限定姓名是字母和汉字,长度为{1,10}
String regex = "^[a-zA-Z\\u4e00-\\u9fa5]{1,10}$";
您可以帮我看一下,这样写有错吗?
想问下Arraylist为null或者size为0的问题:
如果
List<String> s = new ArrayList<>();
那么此时,s是否就不是null,但是s.size()为0?
我不是很懂,什么时候判断一个变量为null。只要new了一个新对象,那么这个变量就不是null了吗?
老师toString方法可以这样写吗
return "序号:"+this.id+"#\t"+"姓名:"+this.name+"\t\t"+"年龄:"+this.age+"\t\t"+ "性别:"+this.sex+"\t\t"+"电话号码:"+this.telNum+"\t\t"+"住址:"+this.address;
不太明白为什么之前课里的toString都是直接retrun,在这里要使用StringBuffer,是有什么特殊作用吗?
老师您好,这个IO包最新版本的已经到了2.11.0了,我是需要下载最新版本的还是用视频中的这个版本的呢
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637