java - JAVA中判断正数\负数时出错

标签 java

下面的代码片段是在不使用 > 的情况下找到数字的符号 (+/-)或 <基本上是条件运算符!

    Scanner s = new Scanner(System.in);
    int n = s.nextInt(); /**take user input /

    /* stretch user input to either of infinity  */
    n *= Double.NEGATIVE_INFINITY;

    /* compare the result now */
    if(n == Double.NEGATIVE_INFINITY)
    {
     System.out.println("number is positive ");
    }
    else if (n == Double.POSITIVE_INFINITY )
    {
        System.out.println("number is negative" );  
    }
    else
    {
        System.out.println("could not determine number type!!" );
    }

我什至添加了

System.out.println("nmbr and negtive infinity is : "+n+" "+Double.NEGATIVE_INFINITY);

对于用户输入:-12,它显示:

/* Ideally it should be "Infinity -Infinity" according to me */
nmbr and negtive infinity is : 2147483647 -Infinity 

在进行乘法以查看结果值之后,但出于某种原因。我不明白nmbr等于任何无限值

2 个问题:

  • 服用int时键入输入,它是否被提升为 double打乘法??

  • 以上逻辑有什么问题?? ,我总是得到输出:

could not determine number type!!

最佳答案

您的代码中有一个隐式转换。 这个:

n *= Double.NEGATIVE_INFINITY;

大致等于:

n = (int) (n * Double.NEGATIVE_INFINITY);

n在这段代码中是一个intDouble.NEGATIVE_INFINITY是一个double,所以结果计算的是一个double。之后,因为您将结果保存在 int 变量中,所以您的结果会被向下转换intint 没有无穷大之类的东西,因此您的 double 值被强制转换为可能的最高整数:Integer.MAX_VALUE == 2147483647
显然这个数不是无穷大。

如果您将 n 更改为 double,则您的代码可以正常工作

关于java - JAVA中判断正数\负数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22224825/

相关文章:

java - 用java解析阿拉伯文/中文/日文RSS提要

java - 如何使用 Camel 和 Java DSL 创建具有多个连接的 ftp 调用的路由?

Java 错误尝试资源不适用于变量类型

java - 在 Java 中解析和检索 JSON 信息——JSONObject 与 JSONArray?

java - 返回(n > 2)? n = 5 : n = 4; doesn't work?

java - 为什么我得到 "The left-hand side of an assignment must be a variable"?

java - 带有 xsl 的 xml :sort not sorting

java - 从 Eclipse 返回已删除的项目

java - 从 EJB 访问 SipFactory

JAVA_HOME 问题。 JDK好像没有正确安装