掌握JAVA输入数据的操作实例

3、本实例主要采用的知识

1、键盘输入数据的标准格式

2、日期的转换,以及包装类的使用

3、类的设计思路

4、具体内容

4、1  加法就是输入两个数字,之后进行加法操作。

加法就是输入两个数字,之后进行加法操作。

遇到问题之后,先开发出一个简单的模型来。

import java.io.* ;
public class ExecDemo01{
	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)) ;
	}
};

以上确实完成功能了,但是有以上问题:

现在的信息是由用户输入的,用户输入的如果不是数字呢?

本程序只能输入整数

代码重复。一使用输入数据,则肯定使用BufferedReader ,所以代码重复了。

此时,需要对类进行更加合理的划分。

输入数据,最常见的可能是:整数、小数、日期、字符串,所以最好将其设计出一个专门的输入数据类型,完成输入数据的功能,而且在此类中还可以对输入的数据进行验证。

下面:完成专门处理输入数据的类,但是只能得到整数和字符串。

import java.io.*;
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+{1}quot;)){	//判断是否由数字组成
				temp = Integer.parseInt(str);	//转型
				flag = false;	//结束循环
			}else{
				System.out.println(err);	//打印错误信息
			}
		}
		return temp;
	}
}

调用InputData 完成加法:

import java.io.* ;
public class ExecDemo02{
	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 类即可。

对输入数据类进行进一步扩充:

在开发中可能输入各种类型:整娄、小数、字符串、日期,进一步扩充InputData 类。

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+{1}quot;)){	// 判断是否由数字组成
				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+{1}quot;)){	// 判断是否由数字组成
				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}{1}quot;)){	// 判断是否由数字组成
				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 ;
	}
};

测试类:

import java.io.* ;
import java.util.* ;
public class TestInput{
	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) ;
	}
};

在以上的操作中,字符串 -->日期的转换操作非常重要。在日后 的开发中都要使用到。


4、2菜单显示
菜单显示在各个系统中都是比较常见的功能


菜单显示在各个系统中都是比较学见的功能。

现在是要求一个菜单的显示,但是实际上每个选项之后都肯定会有自己的若干操作,所以为了方便操作,建立以下的几个类。

Menu (专门显示菜单信息)    -->  Operate

 Operate 类:

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("** 选择的是查看操作") ;
	}
};

需要一个Menu 类显示菜单,但是在显示的时候因为每一操作完成之后都应该把菜单显示出来,所以肯定是循环调用的过程。

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]、系统退出\n") ;
		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("请选择正确的操作!") ;
			}
		}
	}
};

测试类:

import java.io.* ;
public class ExecDemo03{
	public static void main(String args[]) throws Exception{
		new Menu() ;
	}
};

之所以要有操作类,是为了以后扩充方便。

总结:

在开发中一定要先完成功能,之后再考虑类的设计。

主方法就是一个客户端,代码越少越好。