比较双打的分数

时间:2014-07-16 01:14:01

标签: java

我正在努力使用以下代码,该代码应该比较数字分数并输出一些文本给用户,告知他数字的分数是否相同,即

  • 用户输入两个双打: 3.14 4.14

  • 输出:分数相同

  • 用户输入两个双倍: 3.14 4.15

  • 输出:分支不一样

不知何故,我设法编译了以下代码,但是一旦我尝试在Eclipse IDE中运行它,我就会遇到以下通知:

  • 线程中的异常" main" java.util.InputMismatchException
  • 在java.util.Scanner.throwFor(Scanner.java:909)
  • 在java.util.Scanner.next(Scanner.java:1530)
  • at java.util.Scanner.nextDouble(Scanner.java:2456)
  • 在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");
         }
    
        }
    

我希望能够对我的问题有任何正确的解释,我想有不同的方法以不同的方式解决这个案例,但你能不能坚持我的想法并帮助我解决这个问题?

提前致谢!

2 个答案:

答案 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,如果您输入的内容无法转换,则会抛出该异常。