why the exception is thrown when it should not
我正在创建一个程序,让人们输入10个整数,并从最小到最大显示它们。这是我的计划:
导入java.util.scanner;
公共类输入数字{公共静态void main(string[]args){
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| System. out. println("Enter 10 numbers");
int small =0;
for(int i =0; i <10; i ++){
Scanner in =new Scanner (System. in);
int[] i1 =new int[10];
int num =in. nextInt();
i1 [i ]=num ;
if(i1 [i ]<i1 [i +1] || i1 [i ]==i1 [i +1]){
System. out. println(i1 );
}else if(i1 [i ]>i1 [i +1]){
i1 [i +1]=i1 [i ];
System. out. println(i1 );
}
}
} |
}
当我运行我的程序时,在用户输入数字后,会出现类似"[I@55F96302"的情况。
用户输入10个整数后,线程"main"java.lang.arrayindexoutofboundsException中出现异常:10在SaltNo.No.Eng.(SaltNo.java:13)显示,但应显示从最小到最大的数字。
怎么搞的?
- 不幸的是,您发布的代码片段有许多问题。首先阅读以下文章:stackoverflow.com/questions/4455873/&hellip;和stackoverflow.com/questions/16252269/&hellip;,然后再尝试一下!:)
- 提示错误。他可能必须使用数组,他的问题是他不知道自己在做什么。你的链接对此没有帮助。
- 对于问题本身:阅读异常消息告诉您的内容。解决办法就在你眼前。
When I run my program, after the user input the numbers, such things
like"[I@55f96302" appear.
号
这是因为打印的是数组的字符串表示形式,而不是数组的元素。
更换
System.out.println(i1);。
具有
江户十一〔一〕号
And after the user entered 10 integers, Exception in thread"main"
java.lang.ArrayIndexOutOfBoundsException: 10
号
正如异常明确指出的那样,您正试图访问数组的第10个索引(索引从0开始)或第11个元素。但您的数组只有10个元素。这就是为什么你得到了AIOOBE。在条件语句中,当i=9时,谓词i1[i+1]变为i1[10]。你需要解决这个问题。
最后,你也可以通过以下方式实现你的目标:
1 2 3 4 5 6 7 8 9
| System. out. println("Enter 10 numbers");
int small =0;
for(int i =0; i <10; i ++){
Scanner in =new Scanner (System. in);
int[] i1 =new int[10];
int num =in. nextInt();
i1 [i ]=num ;
}
Arrays. stream(i1 ). sorted(). forEach(System. out::println ); |
- 谢谢,但问题是这样,变量"i1"将在循环外声明,这将产生另一个错误。我应该声明数组两次吗?
- @杨,完全正确。您需要在for循环之外声明它。在您进行这些修改之后,如果您仍然面临任何错误,请张贴修改后的代码,并再次通知我们。
每次请求用户提供一个数字作为输入时,都会创建一个新的整数数组。你不应该只创建一个数组来保存这10个整数吗?所以,在循环外部声明整型数组。这样,它将只声明一次。
您必须从一开始就从用户那里获取所有的10个整数,然后您必须对这10个整数运行操作,以便从最小到最大地显示它们。
在从用户那里取出所有10个整数并将它们保存在一个数组中之后,您必须在这些数字中逐个循环,并检查哪个数字最小,哪个数字最大。当循环检查数组的最后一个索引时,不能检查该数组的下一个索引(因为该数组的索引不存在)。这就是为什么你每次都有例外。
1 2 3 4 5 6
| if(i1 [i ]<i1 [i +1] || i1 [i ]==i1 [i +1]){
System. out. println(i1 );
}else if(i1 [i ]>i1 [i +1]){
i1 [i +1]=i1 [i ];
System. out. println(i1 );
} |
号