Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中检查原始数据类型的输入_Java_Types - Fatal编程技术网

在java中检查原始数据类型的输入

在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

我被要求编写一个程序,该程序将接受一个数字的输入并进行检查,所有的原始数据类型(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=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