Java数组按指定规则修改并更新原数组的实现疑问
解决方案
你的代码目前仅实现了结果打印,但未对原数组进行修改,还存在一个核心问题:你将z赋值为中间元素的数值(即3),而非中间元素的索引——这在当前数组中碰巧能运行,但换其他长度的数组就会出错。以下是修正后的代码,可实现修改原数组并输出目标结果:
package javap; public class Arraym { // 先修改原数组,再打印结果 static void modifyAndPrint(int arr[]) { // 计算中间元素的索引,而非元素值 int midIndex = arr.length / 2; // 中间元素右侧的起始索引 int rightStart = midIndex + 1; // 遍历中间元素之前的位置,计算并替换原数组值 for (int i = 0; i < midIndex; i++) { // 对应右侧元素的索引为 rightStart + i arr[i] = arr[i] + arr[rightStart + i]; } // 遍历打印整个数组,元素间用空格分隔 for (int num : arr) { System.out.print(num + " "); } } public static void main(String[] args) { int arr[] = {1,2,3,4,5}; modifyAndPrint(arr); // 此时原数组已被修改,可通过以下代码验证: // System.out.println(Arrays.toString(arr)); // 输出 [5, 7, 3, 4, 5] } }
关键修改说明:
- 用索引替代元素值:通过
midIndex = arr.length / 2获取中间元素的索引(此处为2),而非取元素值3,让逻辑适配所有奇数长度的数组。 - 直接修改原数组:在循环中直接给
arr[i]赋值,将求和结果存入原数组对应位置,而非仅计算并打印临时值。 - 右侧元素索引匹配:中间元素右侧第一个元素的索引是
midIndex + 1,前半部分第i个元素对应的右侧元素索引为rightStart + i,完美匹配题目要求的arr[0]+arr[3]、arr[1]+arr[4]对应关系。 - 打印格式优化:打印时给每个元素后添加空格,保证输出格式为
5 7 3 4 5。
运行这段代码后,原数组会被直接修改为目标数组,同时输出符合要求的结果。
内容的提问来源于stack exchange,提问作者Siddhiraj Ranaware
相关产品推荐
相关产品推荐

