应该是十进制形式

时间:2017-07-30 06:09:18

标签: java

我的程序只有在输入十进制数时才能工作。但是当我输入整数时,它仍然会运行。需要帮助

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));
    }

}

3 个答案:

答案 0 :(得分:0)

我不清楚你想要达到什么目标:

  1. 如果输入值为1.0,程序会返回错误吗?
  2. 如果输入值为1,程序是否会返回错误,但是如果它是1.0可以吗?
  3. 如果答案是(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-如果不是那么它是一个整数并抛出异常