实例要求:
1,加法操作:
键盘输入两个数字,完成加法操作。因为从键盘接收过来的内容都是通过字符串形式存放的,所以此时直接通过包装类
Integer将字符串变为基本数据类型。
2,菜单显示:
采用的知识点:
1,键盘输入数据的标准格式。
2,日期格式的转换。
3,类的设计思路。
具体内容:
实例1:加法操作:
遇到问题后,先开发一个简单模型:
package 类集; import java.io.BufferedReader; import java.io.InputStreamReader; public class Filloutput { public static void main(String args[]) throws Exception{ int i = 0 ; int j = 0 ; BufferedReader buf = null ; // 接收键盘的输入数据 buf = new BufferedReader(new InputStreamReader(System.in)) ; String str = null ; // 接收数据 System.out.print("请输入第一个数字:") ; str = buf.readLine() ; // 接收数据 i = Integer.parseInt(str) ; // 将字符串变为整数 System.out.print("请输入第二个数字:") ; str = buf.readLine() ; // 接收数据 j = Integer.parseInt(str) ; // 将字 System.out.println(i + " + " + j + " = " + (i + j)) ; } }
以上确实完成功能:但是存在问题:
1,现在信息是用户输入,如果输入不是数字呢?
2,本程序只能输入整数。
3,代码重复,多次使用BufferedReader。
此时,需要对类进行更加合理划分。
输入数据,最常见整数,小数,日期。字符串,最好设计一个专门输入数据类型。完成输入数据功能,在类中可以对输入数据验证。
下面:完成专门输入数据的类,但是只能看到整数和字符串。
下面都是通过正则表达式对输入数据进行验证,并且通过while,来循环调用输入,设置标志结束循环。
package 类集; import java.io.* ; import java.util.* ; import java.text.* ; public class InputData{ private BufferedReader buf = null ; public InputData(){// 只要输入数据就要使用此语句 this.buf = new BufferedReader(new InputStreamReader(System.in)) ; } public String getString(String info){ // 得到字符串信息 String temp = null ; System.out.print(info) ; // 打印提示信息 try{ temp = this.buf.readLine() ; // 接收数据 }catch(IOException e){ e.printStackTrace() ; } return temp ; } public int getInt(String info,String err){ // 得到一个整数的输入数据 int temp = 0 ; String str = null ; boolean flag = true ; // 定义一个标记位 while(flag){ str = this.getString(info) ; // 接收数据 if(str.matches("^\d+$")){ // 判断是否由数字组成 temp = Integer.parseInt(str) ; // 转型 flag = false ; // 结束循环 }else{ System.out.println(err) ; // 打印错误信息 } } return temp ; } public float getFloat(String info,String err){ // 得到一个小数的输入数据 float temp = 0 ; String str = null ; boolean flag = true ; // 定义一个标记位 while(flag){ str = this.getString(info) ; // 接收数据 if(str.matches("^\d+.?\d+$")){ // 判断是否由数字组成 temp = Float.parseFloat(str) ; // 转型 flag = false ; // 结束循环 }else{ System.out.println(err) ; // 打印错误信息 } } return temp ; } public Date getDate(String info,String err){ // 得到一个小数的输入数据 Date temp = null ; String str = null ; boolean flag = true ; // 定义一个标记位 while(flag){ str = this.getString(info) ; // 接收数据 if(str.matches("^\d{4}-\d{2}-\d{2}$")){ // 判断是否由数字组成 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd") ; try{ temp = sdf.parse(str) ; // 将字符串变为Date型数据 }catch(Exception e){} flag = false ; // 结束循环 }else{ System.out.println(err) ; // 打印错误信息 } } return temp ; } };
以上的日期转换操作,非常重要。在开发中都要使用到。
重新写输入的类调用上面的类。
package 类集; import java.io.BufferedReader; import java.io.InputStreamReader; public class Filloutput { public static void main(String args[]) throws Exception{ int i = 0 ; int j = 0 ; InputData input = new InputData() ; i = input.getInt("请输入第一个数字:","输入的数据必须是数字,请重新输入!") ; j = input.getInt("请输入第二个数字:","输入的数据必须是数字,请重新输入!") ; System.out.println(i + " + " + j + " = " + (i + j)) ; } }
与之前代码相比,此处更合理,因为只要想从键盘输入整数,直接使用InputData即可。
测试输入日期:
package 类集; import java.util.Date; public class Filloutput { public static void main(String args[]) throws Exception{ InputData input = new InputData() ; // float f = input.getFloat("请输入小数:","输入的不是小数,请重新输入!") ; // System.out.println("小数:" + f) ; Date d = input.getDate("请输入日期,格式为(yyyy-mm-dd):","输入的日期格式不正确,请重新输入") ; System.out.println("日期" + d) ; } }
测试输入小数:
package 类集; import java.util.Date; public class Filloutput { public static void main(String args[]) throws Exception{ InputData input = new InputData() ; float f = input.getFloat("请输入小数:","输入的不是小数,请重新输入!") ; System.out.println("小数:" + f) ; //Date d = input.getDate("请输入日期,格式为(yyyy-mm-dd):","输入的日期格式不正确,请重新输入") ; //System.out.println("日期" + d) ; } }
实例2:菜单显示:
现在是要求一个菜单显示,但是每个选项之后肯定会有自己的若干操作,所以为了方便操作,建立以下几个类。
Menu类(专门显示菜单信息),Operate(表示操作类)。
需要一个Menu类显示菜单,但是在显示的时候因为每一操作完成后都应该把菜单显示出来。所以肯定是循环调用的过程。
操作类:
package 类集; public class Operate{ public static void add(){ // 增加操作 System.out.println("** 选择的是增加操作") ; } public static void delete(){ // 删除操作 System.out.println("** 选择的是删除操作") ; } public static void update(){ // 更新操作 System.out.println("** 选择的是更新操作") ; } public static void find(){ // 查看操作 System.out.println("** 选择的是查看操作") ; } };
菜单类:
package 类集; public class Menu{ public Menu(){ while(true){ this.show() ; // 无限制调用菜单的显示 } } public void show(){ System.out.println("===== Xxx系统 =====") ; System.out.println(" [1]、增加数据") ; System.out.println(" [2]、删除数据") ; System.out.println(" [3]、修改数据") ; System.out.println(" [4]、查看数据") ; System.out.println(" [0]、系统退出 ") ; InputData input = new InputData() ; int i = input.getInt("请选择:","请输入正确的选项!") ; switch(i){ case 1:{ Operate.add() ; // 调用增加操作 break ; } case 2:{ Operate.delete() ; // 调用删除操作 break ; } case 3:{ Operate.update() ; // 调用更新操作 break ; } case 4:{ Operate.find() ; // 调用查看操作 break ; } case 0:{ System.exit(1) ; // 系统退出 break ; } default:{ System.out.println("请选择正确的操作!") ; } } } };
真正调用菜单类,菜单类里面执行输入操作,再调用操作类,
package 类集; public class Filloutput { public static void main(String args[]) throws Exception{ new Menu() ; } }