Java数组奇偶元素分离代码编译错误求助,请帮忙修复
修复Java奇偶数组分离代码的编译错误
错误原因梳理
- 类中未声明
numOfVal成员变量,导致方法内无法引用该变量 - Java原生数组没有
add()方法,错误调用了不存在的方法 oddarray和evenarray是局部变量,main方法无法直接访问- 类的
mainarray未初始化,调用setVal()会触发空指针异常
修复后的完整代码
import java.util.Scanner; public class CountEvenOddArray { // 声明类成员变量,让所有方法可访问 int[] mainarray; int[] evenarray; int[] oddarray; int numOfVal; int evenCount = 0; int oddCount = 0; void setInpLength(int numOfVal) { this.numOfVal = numOfVal; // 初始化主数组,长度为用户输入的元素个数 this.mainarray = new int[numOfVal]; // 初始化奇偶数组,最大长度等于主数组长度 this.evenarray = new int[numOfVal]; this.oddarray = new int[numOfVal]; } void setVal(int index, int val) { this.mainarray[index] = val; } void separateEvenOdds() { for (int i = 0; i < numOfVal; i++) { if (mainarray[i] % 2 == 0) { // 用计数器记录偶数数组的当前位置,赋值后计数+1 evenarray[evenCount++] = mainarray[i]; } else { // 用计数器记录奇数数组的当前位置,赋值后计数+1 oddarray[oddCount++] = mainarray[i]; } } } public static void main(String[] args) { CountEvenOddArray abc = new CountEvenOddArray(); Scanner sc = new Scanner(System.in); System.out.println("Enter number of elements you want to store:"); int numOfVal = sc.nextInt(); abc.setInpLength(numOfVal); System.out.println("Enter the elements of the array: "); for (int k = 0; k < numOfVal; k++) { abc.setVal(k, sc.nextInt()); } abc.separateEvenOdds(); sc.close(); // 输出奇数数组的有效元素 System.out.print("The array with the odd elements is: "); for (int i = 0; i < abc.oddCount; i++) { System.out.print(abc.oddarray[i] + " "); } System.out.println(); // 输出偶数数组的有效元素 System.out.print("The array with the even elements is: "); for (int i = 0; i < abc.evenCount; i++) { System.out.print(abc.evenarray[i] + " "); } System.out.println(); } }
关键修复点说明
- 添加类成员变量:新增
numOfVal、evenarray、oddarray、evenCount、oddCount作为类成员,解决变量访问权限问题 - 初始化数组:在
setInpLength()中根据用户输入的长度初始化所有数组,避免空指针,同时不用固定长度100,更合理 - 替换
add()方法:用计数器evenCount和oddCount记录奇偶数组的当前存储位置,直接通过下标赋值,符合Java数组的操作逻辑 - 正确输出数组:遍历数组时只输出有效元素(通过计数器判断),避免输出未赋值的默认0值
- 方法名规范:将
EvenOdds()改为separateEvenOdds(),符合Java驼峰命名规范
内容的提问来源于stack exchange,提问作者lainweb
相关产品推荐
相关产品推荐

