如何安全的读入一个整数或者浮点数

import java.util.*;
import java.util.regex.Pattern;

/**
 * 类名:GetSafeNumber
 * 作用:在控制台中安全的读入一个数值 ------ 整型或浮点型
 * 
 * 方法:
 * 1,用 try ... catch ...
 * 2,用正则表达式
 * 
 * 方法1--说明:
 * 阻塞的方式,用Scanner从控制台安全的读入一个数
 * 
 * 创建时间:2012-8-8
 * 
 * @author 常维军
 *
 */
class GetSafeNumber
{
	/**
	 * 阻塞式的从控制台读入一个安全的整数
	 * @param sc 从控制台读入的字符串
	 * @return 如果是整数则返回,如果不是整数继续读取,知道读入一个整数结束
	 */
	public static int getInt(Scanner sc)
	{
		String inputs = sc.next();

		while(!isInteger(inputs)) {
			System.out.println("您输入的不是整数,请重新输入");
			inputs = sc.next();
		}
		
		return Integer.valueOf(inputs);
	}
	
	/**
	 * 阻塞式的从控制台读入一个安全的浮点数
	 * @param sc 从控制台读入的字符串
	 * @return 如果是浮点数则返回,如果不是浮点数继续读取,知道读入一个正确的浮点数结束
	 */
	public static int getDouble(Scanner sc)
	{
		String inputs = sc.next();

		while(!isDouble(inputs)) {
			System.out.println("您输入的不是整数,请重新输入");
			inputs = sc.next();
		}
		
		return Integer.valueOf(inputs);
	}
	
	/**
	 * 判断是否是浮点数
	 * 方法:利用正则表达式
	 * @param s 需要判断的字符串
	 * @return 是浮点数返回真,否则返回假
	 */
	public static boolean isDouble(String s){
		Pattern pattern = Pattern.compile("[0-9]*(\\.?)[0-9]*");
		if(pattern.matcher(s).matches()) {
			return true;
		}
		return false;
	}
	
	/**
	 * 判断是否是整数
	 * 方法:利用正则表达式
	 * @param s 需要判断的字符串
	 * @return 是整数返回真,否则返回假
	 */
	public static boolean isInteger(String s){
		Pattern pattern = Pattern.compile("(\\-?)[0-9]*");
		if(pattern.matcher(s).matches()) {
			return true;
		}
		return false;
	}	
}


--------------------------------------------------------------------------华丽的分割线(上面版本问题较多,这个版本比较完善)--------------------------------------------------------------------------------------

import java.util.*;
import java.util.regex.Pattern;

/**
 * 类名:GetSafeNumber
 * 作用:在控制台中安全的读入一个数值 ------ 整型或浮点型
 * 
 * 方法:
 * 1,用 try ... catch ... (会损失效率,最好不要用)
 * 2,用正则表达式	
 * 
 * 方法2--说明:
 * 阻塞的方式,用Scanner从控制台安全的读入一个数
 * 
 * 创建时间:2012-8-6 15:20
 * 
 * 修改时间:2012-8-6 16:31 
 * 			说明:添加:public static int getInt()
 * 				   添加:public static int getDouble()
 * 				   其他BUG修正
 * 
 * @author 常维军
 *
 */
class GetSafeNumber
{
	/**
	 * 阻塞式的从控制台读入一个安全的整数
	 * 说明:显式使用Scanner对象
	 * @param sc Scanner对象
	 * @return 如果是整数则返回,如果不是整数继续读取,知道读入一个整数结束
	 */
	public static int getInt(Scanner sc)
	{
		String inputs = sc.next();

		while(!isInteger(inputs)) {
			System.out.println("您输入的不是整数,请重新输入");
			inputs = sc.next();
		}
		
		return Integer.valueOf(inputs);
	}
	
	/**
	 * 阻塞式的从控制台读入一个安全的整数
	 * 说明:隐式使用Scanner对象
	 * @return 如果是整数则返回,如果不是整数继续读取,知道读入一个整数结束
	 */
	public static int getInt()
	{
		Scanner sc = new Scanner(System.in);
		String inputs = sc.next();

		while(!isInteger(inputs)) {
			System.out.println("您输入的不是整数,请重新输入");
			inputs = sc.next();
		}
		
		return Integer.valueOf(inputs);
	}
	
	/**
	 * 阻塞式的从控制台读入一个安全的浮点数
	 * 说明:显式使用Scanner对象
	 * @param sc Scanner对象
	 * @return 如果是浮点数则返回,如果不是浮点数继续读取,知道读入一个正确的浮点数结束
	 */
	public static double getDouble(Scanner sc)
	{
		String inputs = sc.next();

		while(!isDouble(inputs)) {
			System.out.println("您输入的不是浮点数,请重新输入");
			inputs = sc.next();
		}
		
		return Double.valueOf(inputs);
	}
	
	/**
	 * 阻塞式的从控制台读入一个安全的浮点数
	 * 说明:隐式使用Scanner对象
	 * @return 如果是浮点数则返回,如果不是浮点数继续读取,知道读入一个正确的浮点数结束
	 */
	public static double getDouble()
	{
		Scanner sc = new Scanner(System.in);
		String inputs = sc.next();

		while(!isDouble(inputs)) {
			System.out.println("您输入的不是浮点数,请重新输入");
			inputs = sc.next();
		}
		
		return Double.valueOf(inputs);
	}
	
	/**
	 * 判断是否是浮点数
	 * 方法:利用正则表达式
	 * @param s 需要判断的字符串
	 * @return 是浮点数返回真,否则返回假
	 */
	public static boolean isDouble(String s){
		Pattern pattern = Pattern.compile("(\\-?)[0-9]*(\\.?)[0-9]*");
		if(pattern.matcher(s).matches()) {
			return true;
		}
		return false;
	}
	
	/**
	 * 判断是否是整数
	 * 方法:利用正则表达式
	 * @param s 需要判断的字符串
	 * @return 是整数返回真,否则返回假
	 */
	public static boolean isInteger(String s){
		Pattern pattern = Pattern.compile("(\\-?)[0-9]*");
		if(pattern.matcher(s).matches()) {
			return true;
		}
		return false;
	}	
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 可以使用C++中的cin语句来读入一个字符、一个整数一个单精度浮点数。具体代码如下: char c; int n; float f; cin >> c >> n >> f; 其中,>>符号表示输入运算符,将输入的值赋给对应的变量。读入的字符、整数浮点数分别存储在变量c、n和f中。 ### 回答2: 读入一个字符,一个整数一个单精度浮点数是一种常见的输入据的形式,通常在编程中使用。 首先,要从输入源中读取字符、整数浮点数,可以使用相应语言提供的输入函或类库。例如,在C语言中使用scanf函: ``` char c; int i; float f; scanf("%c %d %f", &c, &i, &f); ``` 以上代码读取输入源的第一行,将第一个字符存储在变量c中,第一个整数存储在变量i中,第一个浮点数存储在变量f中。注意,这里用了类似printf函的格式控制串来指定输入格式。 读取到输入时,可以对其进行进一步的处理。例如,可以根据字符的值来执行不同的操作: ``` if (c == 'A') { printf("Integer: %d, Float: %f\n", i, f); } else if (c == 'B') { printf("Float: %f, Integer: %d\n", f, i); } ``` 以上代码根据输入的字符c的值来输出不同的结果。 总之,读取一个字符、一个整数一个单精度浮点数是编程中一个常见任务,需要使用相应语言提供的输入函或类库,并且可以根据读入的输入执行相应的操作。 ### 回答3: 读入一个字符、一个整数一个单精度浮点数是常见的输入方式,可以在编程的过程中经常用到。这种输入方式可以用很多编程语言来实现,包括C语言、Python、Java等。 举个例子,在C语言中,可以使用scanf函来实现输入。具体的使用方法如下: scanf("%c %d %f", &ch, &num, &f); //ch表示字符,num表示整数,f表示浮点数 其中%c表示字符,%d表示整数,%f表示浮点数。&ch、&num和&f则是它们对应的变量的地址,用来接收输入的值。 在读入一个字符、一个整数一个单精度浮点数之后,我们可以对它们进行各种各样的操作,比如输出、计算等等。下面是一个例子: #include <stdio.h> int main() { char ch; int num; float f; scanf("%c %d %f", &ch, &num, &f); printf("ch=%c, num=%d, f=%f\n", ch, num, f); printf("num*2=%d, f+1=%f\n", num*2, f+1); return 0; } 在这个例子中,我们读入一个字符、一个整数一个单精度浮点数,并且对它们进行了一些简单的计算和输出。运行程序后,输入一个字符、一个整数一个浮点数,就可以得到程序的输出结果。 总之,读入一个字符、一个整数一个单精度浮点数是常见的输入方式,可以帮助我们在编程中实现各种各样的功能。掌握这种输入方式,可以对编程有很大的帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yours风之恋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值