【问题标题】:Figuring out whether a number is a Double in Java在 Java 中判断一个数字是否为 Double
【发布时间】:2010-12-11 03:04:25
【问题描述】:

我是 Java 新手。我试图弄清楚一个数字是否是这样的 Double:

if ( typeof ( items.elementAt(1) )== Double ) {
       sum.add( i, items.elementAt(1));
}

如果有人能告诉我如何重新排列语法以使其正常工作,将不胜感激。

【问题讨论】:

  • 只是我,还是 typeof(object) 在 C# 中实际上不是真实的?我一直以为是 typeof(type)...object o = new object(); Type t = typeof(o); 抛出编译器错误说o is a variable but is used like a type。这个问题的名字有误导性...
  • 在c#中,所有对象都有一个Object#GetType()方法,它返回一个Type。然后可以用来与typeof() 进行比较。在这种情况下,它将是items.elementAt(1).GetType() == typeof(double)

标签: java typeof


【解决方案1】:

试试这个:

if (items.elementAt(1) instanceof Double) {
   sum.add( i, items.elementAt(1));
}

【讨论】:

  • +1。我还想你真的想检查elementAt(0); Java 中的大部分内容都是从零开始的。
【解决方案2】:

由于这是来自 Google 的第一个问题,我将在此处添加 JavaScript 样式 typeof 替代方案:

myObject.getClass().getName() // String

【讨论】:

    【解决方案3】:

    反射较慢,但适用于您想知道它是狗类型还是猫类型而不是动物实例的情况。所以你会做这样的事情:

    if(null != items.elementAt(1) && items.elementAt(1).getClass().toString().equals("Cat"))
    {
    //do whatever with cat.. not any other instance of animal.. eg. hideClaws();
    }
    

    不是说上面的答案不起作用,除了空检查部分是必要的。

    另一种回答方法是使用泛型,您可以保证将 Double 作为项目的任何元素。

    List<Double> items = new ArrayList<Double>();
    

    【讨论】:

    • 你能请人们学会说出负面评价的原因吗?我也是java新手,我想看看这个答案有什么问题,所以我不必尝试!
    • 我会避免与硬编码字符串进行比较,如果类名发生变化,instanceof 也存在,所以我们使用它。
    • @enrey 这比 instanceof 有什么优势?
    • @CharlesShiller 优点是字符串“Cat”的后期绑定。
    • +1 for .getClass().toString() 因为由于单向依赖注入,我无法导入该类。谢谢。
    【解决方案4】:

    使用正则表达式来完成这个任务。请参考以下代码。

    public static void main(String[] args) {
        try {
    
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("Enter your content: ");
            String data = reader.readLine();            
            boolean b1 = Pattern.matches("^\\d+$", data);
            boolean b2 = Pattern.matches("[0-9a-zA-Z([+-]?\\d*\\.+\\d*)]*", data); 
            boolean b3 = Pattern.matches("^([+-]?\\d*\\.+\\d*)$", data);
            if(b1) {
                System.out.println("It is integer.");
            } else if(b2) {
                System.out.println("It is String. ");
            } else if(b3) {
                System.out.println("It is Float. ");
            }           
        } catch (IOException ex) {
            Logger.getLogger(TypeOF.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    

    【讨论】:

    • 很好的例子,顺便说一句,什么是'TypeOF'?在最后一行。
    猜你喜欢
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    相关资源
    最近更新 更多