此问题已在此处找到答案:
是什么导致java.lang.arrayindexoutofboundsexception以及如何防止它((26个答案)
昨天关门了。
public static void main(String[] args) {
int sumEven = 0;
int sumOdd = 0;
Scanner scan = new Scanner(System.in);
// getting user's input
System.out.println("Enter the number:");
int num = scan.nextInt();
//converting int number to array
String a = Integer.toString(num);
int[] newNum = new int[a.length()];
for (int i=0; i<a.length(); i++){
newNum[i] = a.charAt(i);
}
// checking the element is even or odd
for (int i = 0; i<num; i++){
if (newNum[i] % 2 ==0){
sumEven = sumEven + newNum[i];
}else{
sumOdd = sumOdd + newNum[i];
}
}
// printing the output
System.out.println("Sum of Even Numbers: "+sumEven);
System.out.println("Sum of Odd Numbers: "+sumOdd);
}
4条答案
按热度按时间z9ju0rcb1#
在第二个循环中,
num
长度可能不一样newNum
,所以只需要在下面进行更改在第一个循环中,确保可以得到正确的int值
zzzyeukh2#
您的代码中有一些错误-
newNum[i] = a.charAt(i);
这将整型字符转换为其ascii值。如果你输入5,它将变为53,如果你输入6,它将变为54。检查元素是偶数还是奇数时。
for (int i = 0; i<num; i++)
这是获取arrayindexoutofbounds的主要原因,因此需要运行循环直到达到数组长度。o0lyfsai3#
你做错的是
对于(int i=0;i<num;i++{if(newnum[i]%2==0){*
发生的情况:例如,用户输入num=19,上面的for循环应该运行19次,对于循环中的每一次,您都使用'i'作为数组newnum的索引,该数组的大小仅为2。因此,当循环达到索引2时,它会给出错误。
您可以:发布完整的问题,以便我可以帮助您实现您正在尝试实现的目标,或者您可以尝试在识别错误时根据您的需要调整代码。
vs91vp4v4#
你应该试运行这个程序。
但你正试图进入多达50个地方的循环,这就是为什么它来了
我想你明白我的意思了。