gpt4 book ai didi

java - Java中原始数据类型的MIN_VALUE和MAX_VALUE

转载 作者:行者123 更新时间:2023-11-30 03:15:48 26 4
gpt4 key购买 nike

针对 HackerRank 中的问题 Java Datatypes (找到给定数字可以适合的原始数据类型)当我提交以下代码时:

import java.util.*;
import java.io.*;
class Solution{
public static void main(String []argh)
{
Scanner sc = new Scanner(System.in);
int t=sc.nextInt();

for(int i=0;i<t;i++)
{

try
{
long x=sc.nextLong();
System.out.println(x+" can be fitted in:");
if(x>=(long)-128 && x<=(long)127)System.out.println("* byte");
if(x>=(long)Short.MIN_VALUE && x<=(long)Short.MAX_VALUE)System.out.println("* short");
if(x>=(long)Integer.MIN_VALUE && x<=(long)Integer.MAX_VALUE)System.out.println("* int");
if(x>=(long)Long.MIN_VALUE && x<=(long)Long.MAX_VALUE)System.out.println("* long");
}
catch(Exception e)
{
System.out.println(sc.next()+" can't be fitted anywhere.");
}

}
}

}

它通过了所有测试用例。但是当我提交以下代码时:

import java.util.*;
import java.io.*;
class Solution{
public static void main(String []argh)
{
Scanner sc = new Scanner(System.in);
int t=sc.nextInt();

for(int i=0;i<t;i++)
{

try
{
long x=sc.nextLong();
System.out.println(x+" can be fitted in:");
if(x>=(long)-128 && x<=(long)127)System.out.println("* byte");
if(x>=-1*(long)Math.pow(2,15) && x<=(long)Math.pow(2,15)-1)System.out.println("* short");
if(x>=-1*(long)Math.pow(2,31) && x<=(long)Math.pow(2,31)-1)System.out.println("* int");
if(x>=-1*(long)Math.pow(2,63) && x<=(long)Math.pow(2,63)-1)System.out.println("* long");
}
catch(Exception e)
{
System.out.println(sc.next()+" can't be fitted anywhere.");
}

}
}

}

一些测试用例失败了。

这是未通过的测试用例之一(从 HackerRank 下载)

17 9223372036854775808 9223372036854775807 -9223372036854775808 -9223372036854775807 4294967296 4294967295 -4294967296 -4294967295 65536 65535 -65536 -65535 256 255 -256 -255 12222222222222222222222222222222222222222221

为什么会这样呢?它与 Math.pow() 的返回类型有什么关系吗?任何帮助表示赞赏。 :)

最佳答案

问题出在 Math.pow(2, 63) ,正如这个问题中所讨论的:Inconsistent behaviour of primitive integer types in Java

Math.pow返回一个 double 值,当发生强制转换时,您可能会丢失一些信息。

如果您希望 IF 起作用,if( x >= -1 * (long) Math.pow(2,63) && x<=(long) Math.pow(2,63) -1 ) System.out.println("* long");

您需要添加一个括号,例如 x<=(long) ( Math.pow(2,63)-1 )

if(x>=-1*(long)Math.pow(2,63) && x<=(long) ( Math.pow(2,63)-1 ) )System.out.println("* long");

关于java - Java中原始数据类型的MIN_VALUE和MAX_VALUE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32651376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com