为什么同样的语句放在同样的for循环里结果不一样,只是放在里面和放在另一个for里

代码如图
这是放在for里面的

package fushi;

import java.util.Scanner;


public class test9 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();//n个商店
        int[] arr = new int[n];
        int[] ans = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = scan.nextInt();
            if(i == 0) {
                ans[i] = (arr[i]+arr[i+1])/2;//去尾
            }else if(i == n-1) {
                ans[i] = (arr[i]+arr[i-1])/2;
            }else {
                ans[i] = (arr[i-1]+arr[i]+arr[i+1])/3;
            }
        }


        for (int i = 0; i < n; i++) {
            System.out.print(ans[i]+" ");
        }
    }
}

图片说明

这是放在外面的

package fushi;

import java.util.Scanner;


public class test9 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();//n个商店
        int[] arr = new int[n];
        int[] ans = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = scan.nextInt();

        }
        for (int i = 0; i < n; i++) {
            if(i == 0) {
                ans[i] = (arr[i]+arr[i+1])/2;//去尾
            }else if(i == n-1) {
                ans[i] = (arr[i]+arr[i-1])/2;
            }else {
                ans[i] = (arr[i-1]+arr[i]+arr[i+1])/3;
            }
        }

        for (int i = 0; i < n; i++) {
            System.out.print(ans[i]+" ");
        }
    }
}

图片说明

两个结果不一样
为什么会这样

这很明显啊,你要是放一起的话, 遍历过程中,比如刚遍历到n 此时 n+1 后面的arr都是0 你拿来算平均当然就错了。。。

for (int i = 0; i < n; i++) {
arr[i] = scan.nextInt();
if(i == 0) {
ans[i] = (arr[i]+arr[i+1])/2;//去尾
}else if(i == n-1) {
ans[i] = (arr[i]+arr[i-1])/2;
}else {
ans[i] = (arr[i-1]+arr[i]+arr[i+1])/3;
}
}
这段代码中arr[i] = scan.nextInt();放在了for循环里面,但是在循环里使用到了arr[i+1]),而此时arr[i+1])还没有赋值,其值为0,所以结果不同,结果也是错误的,望采纳。