在java中检查原始数据类型的输入
我被要求编写一个程序,该程序将接受一个数字的输入并进行检查,所有的原始数据类型(byte、short、int、long)都将被放入其中。我编写了以下代码,但没有通过所有测试用例:在java中检查原始数据类型的输入,java,types,Java,Types,我被要求编写一个程序,该程序将接受一个数字的输入并进行检查,所有的原始数据类型(byte、short、int、long)都将被放入其中。我编写了以下代码,但没有通过所有测试用例: import java.util.*; import java.io.*; class Solution { public static void main(String []args) { Scanner sc = new Scanner(System.in); int t
import java.util.*;
import java.io.*;
class Solution {
public static void main(String []args) {
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>=-Byte.MAX_VALUE && x<=Byte.MAX_VALUE)
System.out.println("* byte");
if(x>=-Short.MAX_VALUE && x<=Short.MAX_VALUE)
System.out.println("* short");
if(x>=-Integer.MAX_VALUE && x<=Integer.MAX_VALUE)
System.out.println("* int");
if(x>=-Long.MAX_VALUE && x<=Long.MAX_VALUE)
System.out.println("* long");
}
catch(Exception e) {
System.out.println(sc.next()+" can't be fitted anywhere.");
}
}
}
}
import java.util.*;
导入java.io.*;
类解决方案{
公共静态void main(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
int t=sc.nextInt();
对于(int i=0;i=-Byte.MAX\u VALUE&&x=-Short.MAX\u VALUE&&x=-Integer.MAX\u VALUE&&x=-Long.MAX\u VALUE&&x当然会失败。以Byte
为例。在Java中,它表示为有符号的8位值(2的补码符号)。这意味着它的范围从-128到+127不等。逻辑上说,如果它位于b/w(包括两边),它将是一个字节,-127到+127。它将在-128失败
将-Byte.MAX\u值
替换为Byte.MIN\u值
,它就会工作。您应该在此处使用if
…else
逻辑,以防止给定输入匹配多个情况:
long x = sc.nextLong();
System.out.println(x+" can be fitted in:");
if (x >= Byte.MIN_VALUE && x <= Byte.MAX_VALUE) {
System.out.println("* byte");
}
else if (x >= Short.MIN_VALUE && x <= Short.MAX_VALUE) {
System.out.println("* short");
}
else if (x >= Integer.MIN_VALUE && x <= Integer.MAX_VALUE) {
System.out.println("* int");
}
else if (x >= Long.MIN_VALUE && x <= Long.MAX_VALUE) {
System.out.println("* long");
}
else {
System.out.println("value does not fit any type");
}
long x=sc.nextLong();
系统输出打印LN(x+)可安装在:“);
如果(x>=Byte.MIN\u值&&x=Short.MIN\u值&&x=Integer.MIN\u值&&x=Long.MIN\u值&&x我希望如果您给出的值不能被长变量接受,那么该值将在Long.MAX\u值和Long.MIN\u值之间循环。我可以建议的是,从用户处获取一个字符串形式的输入,然后构造BigDecimal并比较范围值使用一些内置方法对具有BigDecimal值的原语进行求值。您应该努力使用类.MIN\u VALUE/MAX\u VALUE
而不是对它们求反。我不认为OP的代码会“失败”仅基于此问题,但可能对突出显示的边缘案例进行了错误的类型分配。是的。OP的代码存在多个错误。正如您正确提到的,使用多个ifs而不是if-else。如果使用-128、-32768等,则会失败,每种情况下都会出现误报。@TimBiegeleisen