嗨,我是java的半新人,不能想出这个。捕获异常后,我想要一个for循环继续并继续读取新的整数。这是一个希望你采取的在线挑战 5(这说明它之后应该有多少输入),
-150,
150000,
1500000000,
213333333333333333333333333333333333,
-100000000000000.
转到这个输出:
-150 can be fitted in:
* short
* int
* long
150000 can be fitted in:
* int
* long
1500000000 can be fitted in:
* int
* long
213333333333333333333333333333333333 can't be fitted anywhere.
-100000000000000 can be fitted in:
* long
我希望计算机检查一个字节,short,int和long的数字是否大。它工作(可能不是最好的方式),直到它达到213333333333333333333333333333333333。它导致InputMismatchException(bc它变大)并且代码捕获它但是在它不起作用之后。这是输出:
-150 can be fitted in:
* short
* int
* long
150000 can be fitted in:
* int
* long
1500000000 can be fitted in:
* int
* long
0 can't be fitted anywhere.
0 can't be fitted anywhere.
我真的无法弄明白任何帮助都会受到赞赏!
public static void main(String[] args) {
int numofinput = 0;
Scanner scan = new Scanner(System.in);
numofinput = scan.nextInt();
int[] input;
input = new int[numofinput];
int i =0;
for(i = i; i < numofinput && scan.hasNext(); i++){
try {
input[i] = scan.nextInt();
System.out.println(input[i] + " can be fitted in:");
if(input[i] >=-127 && input[i] <=127){
System.out.println("* byte");
}if((input[i] >=-32768) && (input[i] <=32767)){
System.out.println("* short");
}if((input[i] >=-2147483648) && (input[i] <=2147483647)){
System.out.println("* int");
}if((input[i] >=-9223372036854775808L) && (input[i] <=9223372036854775807L)){
System.out.println("* long");
}
}catch (InputMismatchException e) {
System.out.println(input[i] + " can't be fitted anywhere.");
}
}
}
答案 0 :(得分:3)
问题是在异常之后Scanner
中的输入不匹配仍未声明,因此您将永远在循环中捕获相同的异常。
要解决此问题,您的程序需要从Scanner
删除一些输入,例如通过调用nextLine()
块中的catch
:
try {
...
} catch (InputMismatchException e) {
// Use scan.next() to remove data from the Scanner,
// and print it as part of error message:
System.out.println(scan.next() + " can't be fitted anywhere.");
}
input[]
数组可以替换为单个long input
,因为您从不使用先前迭代的数据;因此,无需将其存储在数组中。
此外,您应该通过调用nextInt
来取代对nextLong
的通话,否则您将无法正确处理大数字。
您还应该删除long
完全
if((input[i] >=-9223372036854775808L) && (input[i] <=9223372036854775807L))
因为阅读true
已成功完成,所以保证为nextLong
。
最后,使用&#34;魔术数字&#34;在程序中应避免使用相应内置Java类的预定义常量,例如
if((input[i] >= Integer.MIN_VALUE) && (input[i] <= Integer.MAX_VALUE))
而不是
if((input[i] >=-2147483648) && (input[i] <=2147483647))