我的程序只有在输入十进制数时才能工作。但是当我输入整数时,它仍然会运行。需要帮助
public class DeptEmpcountMapper extends
Mapper<LongWritable, Text, Text, LongWritable> {
@Override
protected void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
String st = value.toString();
String[] field = st.split(":");
String st1 = field[2];
context.write(new Text(st1), new LongWritable(1));
}
}
答案 0 :(得分:0)
我不清楚你想要达到什么目标:
如果答案是(1)我只会验证返回的十进制是否可以转换为int或(不会丢失精度)。 如果答案是(2)(似乎是这样)我会使用scanner.next(),它返回String,而不是nextDouble()。然后验证在实际转换为double之前是否可以将String转换为int。
答案 1 :(得分:0)
如果您确实希望42
成为错误,但42.0
可以接受,即使它们都是完全相同的数字,请先调用hasNextXxx
验证输入方法
这也解决了使用异常捕获错误输入的问题。
Scanner decimal = new Scanner(System.in);
for (;;) { // forever loop
System.out.println("Enter a decimal number: ");
if (decimal.hasNextDouble() && ! decimal.hasNextBigInteger()) {
double value = decimal.nextDouble();
value = ((value - 32)*5)/9;
System.out.println("RESULT : " +value);
break; // exit forever loop
}
decimal.next(); // consume bad token
System.out.println("Must be in decimal number ! ");
}
答案 2 :(得分:0)
如果你想把你的程序只用于小数,那么你可以尝试一次黑客攻击,
1-您可以将您的号码转换为字符串
使用十进制字符分割字符串
3-将十进制后的字符串转换为数字,并查找它是否大于0
4-如果大于0则为十进制数,然后执行操作
5-如果不是那么它是一个整数并抛出异常