import java.util.* ;
public class ScannerDemo03{
public static void main(String args[]){
Scanner scan = new Scanner(System.in) ; // 从键盘接收数据
float f = 0.0f ;
System.out.print("输入小数:") ;
if(scan.hasNextFloat()){ // 判断输入的是否是小数
f = scan.nextFloat() ; // 接收小数
System.out.println("小数数据:" + f) ;
}else{
System.out.println("输入的不是小数!") ;
}
}
};
代码如上 :
问题是 1. if里的判断条件判断输入的若是小数的话,则f接收并输出。 但是如果输入的是整型的话 比如2 则也可以输出2.0 这是什么问题- - 它不应该输出的是else里的 “输入的不是小数”吗。 是不是hasNextFloat 方法也可以接收整型数据呢。
2. 有的资料说 浮点型数据一定要带小数点,有的说 浮点数可以只是整型的,不带小数点的, 也可以由带小数点的。很迷惑。 求高手指点迷津哈 感激不尽。
public class ScannerDemo03{
public static void main(String args[]){
Scanner scan = new Scanner(System.in) ; // 从键盘接收数据
float f = 0.0f ;
System.out.print("输入小数:") ;
if(scan.hasNextFloat()){ // 判断输入的是否是小数
f = scan.nextFloat() ; // 接收小数
System.out.println("小数数据:" + f) ;
}else{
System.out.println("输入的不是小数!") ;
}
}
};
代码如上 :
问题是 1. if里的判断条件判断输入的若是小数的话,则f接收并输出。 但是如果输入的是整型的话 比如2 则也可以输出2.0 这是什么问题- - 它不应该输出的是else里的 “输入的不是小数”吗。 是不是hasNextFloat 方法也可以接收整型数据呢。
2. 有的资料说 浮点型数据一定要带小数点,有的说 浮点数可以只是整型的,不带小数点的, 也可以由带小数点的。很迷惑。 求高手指点迷津哈 感激不尽。
就好比商品标价2元,也一样可以说成标价为2.0元。这样精度更高了。
你应该反过来判断import java.util.*;public class ScannerDemo {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in); // 从键盘接收数据
float f = 0.0f;
System.out.print("输入小数:");
if (scan.hasNextInt()) {
System.out.println("输入的不是小数!");
} else {
System.out.println("小数数据:" + scan.next());
}
}
};
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
System.out.print("输入小数:");
if (scan.hasNextInt()) {//不是整数的也不一定是小数
System.out.println("输入的不是小数!");
} else if(scan.hasNextDouble()){
System.out.println("小数数据:" + scan.hasNextDouble());
} else {
System.out.println("输入的不是小数!");
}
}
其实用这个判断还是不够准确的,因为你不管用double还是float都是有一个范围的
最好是当做一个字符串读入,用正则表达式去判断
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
System.out.print("输入小数:");
String str = scan.nextLine();
Pattern p = Pattern.compile("(\\d|([1-9]\\d*))\\.\\d*");
Matcher m = p.matcher(str);
if(m.matches()) {
System.out.println("小数数据:" + str);
} else {
System.out.println("输入的不是小数!");
}
}
对于Scanner的 hasNextXXX方法,
我觉得,应该是说,下一个字符串中,有没有能够被转化成该类型的数据。
比如说:hasNextInt(),是说被扫描的当前字符序列中,
当前位置后,是否紧邻一个能被转换成整型数据的字符序列。存在返回true。
当然:hasNextFloat()方法,也就是说,当前位置后,是否紧邻一个能被转换成浮点数的字符序列。
字符序列"20"很显然能被转换成浮点数,20.0所以,当然返回true咯。