下面的代码片段是在不使用 >
的情况下找到数字的符号 (+/-)或 <
基本上是条件运算符!
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
在这段代码中是一个int
,Double.NEGATIVE_INFINITY
是一个double
,所以结果计算的是一个double
。之后,因为您将结果保存在 int
变量中,所以您的结果会被向下转换
为 int
。 int
没有无穷大之类的东西,因此您的 double 值被强制转换
为可能的最高整数:Integer.MAX_VALUE == 2147483647
。
显然这个数不是无穷大。
如果您将 n 更改为 double,则您的代码可以正常工作
关于java - JAVA中判断正数\负数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22224825/