java—当我运行这个程序时,我总是得到一个超出长度界限的错误索引

wz1wpwve  于 2021-08-20  发布在  Java
关注(0)|答案(4)|浏览(293)

此问题已在此处找到答案

是什么导致java.lang.arrayindexoutofboundsexception以及如何防止它((26个答案)
昨天关门了。

  1. public static void main(String[] args) {
  2. int sumEven = 0;
  3. int sumOdd = 0;
  4. Scanner scan = new Scanner(System.in);
  5. // getting user's input
  6. System.out.println("Enter the number:");
  7. int num = scan.nextInt();
  8. //converting int number to array
  9. String a = Integer.toString(num);
  10. int[] newNum = new int[a.length()];
  11. for (int i=0; i<a.length(); i++){
  12. newNum[i] = a.charAt(i);
  13. }
  14. // checking the element is even or odd
  15. for (int i = 0; i<num; i++){
  16. if (newNum[i] % 2 ==0){
  17. sumEven = sumEven + newNum[i];
  18. }else{
  19. sumOdd = sumOdd + newNum[i];
  20. }
  21. }
  22. // printing the output
  23. System.out.println("Sum of Even Numbers: "+sumEven);
  24. System.out.println("Sum of Odd Numbers: "+sumOdd);
  25. }
z9ju0rcb

z9ju0rcb1#

在第二个循环中, num 长度可能不一样 newNum ,所以只需要在下面进行更改

  1. for (int i = 0; i<newNum.length; i++){ // change from num to newNum.length
  2. if (newNum[i] % 2 ==0){
  3. sumEven = sumEven + newNum[i];
  4. }else{
  5. sumOdd = sumOdd + newNum[i];
  6. }

在第一个循环中,确保可以得到正确的int值

  1. String a = Integer.toString(num);
  2. int[] newNum = new int[a.length()];
  3. for (int i=0; i<a.length(); i++){
  4. newNum[i] = a.charAt(i)-'0'; // make sure we can get int
  5. }
  6. }
zzzyeukh

zzzyeukh2#

您的代码中有一些错误- newNum[i] = a.charAt(i); 这将整型字符转换为其ascii值。如果你输入5,它将变为53,如果你输入6,它将变为54。
检查元素是偶数还是奇数时。 for (int i = 0; i<num; i++) 这是获取arrayindexoutofbounds的主要原因,因此需要运行循环直到达到数组长度。

  1. public static void main(String[] args) {
  2. int sumEven = 0, sumOdd = 0;
  3. Scanner scan = new Scanner(System.in);
  4. System.out.println("Enter the number:");
  5. int num = scan.nextInt();
  6. String a = Integer.toString(num);
  7. int[] newNum = new int[a.length()];
  8. for (int i=0; i<a.length(); i++){
  9. newNum[i] = Integer.parseInt(String.valueOf(a.charAt(i)));
  10. }
  11. for (int i = 0; i<newNum.length; i++){
  12. if (newNum[i] % 2 == 0){
  13. sumEven = sumEven + newNum[i];
  14. }else{
  15. sumOdd = sumOdd + newNum[i];
  16. }
  17. }
  18. System.out.println("Sum of Even Numbers: "+sumEven);
  19. System.out.println("Sum of Odd Numbers: "+sumOdd);
  20. }
展开查看全部
o0lyfsai

o0lyfsai3#

你做错的是
对于(int i=0;i<num;i++{if(newnum[i]%2==0){*
发生的情况:例如,用户输入num=19,上面的for循环应该运行19次,对于循环中的每一次,您都使用'i'作为数组newnum的索引,该数组的大小仅为2。因此,当循环达到索引2时,它会给出错误。
您可以:发布完整的问题,以便我可以帮助您实现您正在尝试实现的目标,或者您可以尝试在识别错误时根据您的需要调整代码。

vs91vp4v

vs91vp4v4#

你应该试运行这个程序。

  1. Suppose your num = 50
  2. a = "50" ;
  3. //var a is a string whose length =2
  4. //then the length of newNum is 2
  5. newNum = 2;

但你正试图进入多达50个地方的循环,这就是为什么它来了
我想你明白我的意思了。

相关问题