当前位置: 首页 > 面试题库 >

三元运算符导致的意外类型

丁长卿
2023-03-14
问题内容

我正在尝试编写一种获取a的方法,以double验证数字是否在点后有东西,如果有double,则返回a ,如果没有则返回a int

public class Solution {
    public static void main(String[] args) {
        double d = 3.000000000;
        System.out.println(convert1(d));
        System.out.println(convert2(d));
    }

    static Object convert1(double d) {
        if(d % 1 == 0)
            return (int) d;
        else
            return d;
    }

    static Object convert2(double d) {
        return ((d%1) == 0) ? ((int) (d)) : d;
    }
}

输出:

3
3.0

因此,我想要的一切都发生在method中convert1(),但没有发生在method中convert2()。这些方法似乎必须完成相同的工作。但是我做错了什么?


问题答案:

正如其他答案所指出的,此行为是因为三元表达式的两个可能结果都必须具有相同的类型。

因此,您要做的所有事情都可以使三元版本的工作方式与convert1()将强制转换int为的方式相同Object

static Object convert2(double d) {
    return ((d % 1) == 0) ? ((Object) (int) (d)) : d;
}


 类似资料:
  • 问题内容: 我有时会从下面的行中得到。 添加括号后,就可以了。 请澄清我的行为。提前致谢。 问题答案: 永远不会为null,尽管有时是。 也就是说,等同于总是如此。

  • 条件(三元)运算符是 JavaScript 仅有的使用三个操作数的运算符。一个条件后面会跟一个问号(?),如果条件为 truthy ,则问号后面的表达式A将会执行;表达式A后面跟着一个冒号(:),如果条件为 falsy ,则冒号后面的表达式B将会执行。本运算符经常作为 if 语句的简捷形式来使用。(MDN) 三元运算符,也称条件运算符、三目运算符。 三元运算符可以代替简单的 if 语句。 1. 语

  • 问题内容: 是否可以更改此: …对三元运算符? 问题答案: 好吧,中的行为就像这样…… …另一种看待它的方式… 你的问题有点含糊,我们必须在这里假设。 如果(且仅当)声明了一个返回值(,等。)-现在看来似乎没有做到这一点通过你的代码-那么你可以做到这一点… 如果callFunction(…)不返回值,那么你将无法使用三元运算符!就那么简单。你将使用不需要的东西。 请发布更多代码以清除所有问题 尽管

  • 问题内容: 是否可以在Python中一行执行此操作? 我已经尝试过三元运算符: 但是我的IDE(MyEclipse)不喜欢它,没有一个。 问题答案: 是的,您可以这样做: 如果为假,则短路将开始,并且右侧将不被评估。如果为true,则将评估右侧并添加元素。 我只是指出,执行上述操作是完全非Python的,无论如何,最好编写此代码: 示范:

  • 问题内容: 有人可以解释为什么这样的代码吗? 产生以下编译器错误: 不兼容的条件操作数类型ArrayList和HashSet 由于我不明白的原因,以下内容解决了该问题 我正在使用Java 1.4。 问题答案: 这是1.4 中的 错误 ,并已根据bugreport 5080917 进行了修复。 评估 这是一个错误。 xxxxx @ xxxxx 2004-07-30

  • 问题内容: 我似乎无法与三元运算符结合使用此代码的第一部分(+ =)。 我认为这段代码的工作方式如下: 但这是不正确的,因为这会导致控制台出现错误。 所以我的问题是我应该如何正确插入此代码? 问题答案: h.className = h.className + (h.className ? ‘ error’ : ‘error’) 您希望操作员为之工作,最好对此有所具体。 当然,不应有任何伤害 ,但这