我正在努力使用以下代码,该代码应该比较数字分数并输出一些文本给用户,告知他数字的分数是否相同,即
用户输入两个双打: 3.14 和 4.14
输出:分数相同
用户输入两个双倍: 3.14 和 4.15
不知何故,我设法编译了以下代码,但是一旦我尝试在Eclipse IDE中运行它,我就会遇到以下通知:
在comparison.main(comparison.java:12)
import java.util.Scanner;
class comparison
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
double a,b;
a = scan.nextDouble();
b = scan.nextDouble();
compare(a,b);
}
public static void compare(double n, double m)
{
if(n- Math.floor(n) == m - Math.floor(m))
System.out.println("Fractions are the same");
else
System.out.println("Fractions are no the same");
}
}
我希望能够对我的问题有任何正确的解释,我想有不同的方法以不同的方式解决这个案例,但你能不能坚持我的想法并帮助我解决这个问题?
提前致谢!
答案 0 :(得分:0)
试
Double.toString (n).split ("\\.")[1].equals(Double.toString (m).split ("\\.")[1])
但要将问题更改修复为
a = scan.nextDouble();
scan.nextLine (); // consume CR
b = scan.nextDouble();
答案 1 :(得分:0)
documentation for InputMismatchException州:
由扫描程序抛出,表示检索到的令牌没有 匹配预期类型的模式,或者令牌不在 预期类型的范围。
所以,基本上,你的扫描仪试图得到一个双倍,你显然输入的东西要么不是双倍的,要么超出了双倍的范围。
处理此问题的最佳方法可能是从扫描仪中获取字符串,然后检查它们是否可以转换为双精度数。如果没有,则输出错误消息。
编辑 - 与@ scary-wombat达成协议 - 使用BigDecimal - 它有一个带String的构造函数。请务必捕获NumberFormatException,如果您输入的内容无法转换,则会抛出该异常。