se小问题,为什么循环跳不出来

图片说明

图片说明

图片说明
试了下发现语句未执行,为什么呢

你的 arr[i] 赋值语句在 if(arr[i]>100) 判断的后面执行,也就是说执行 if 判断时,arr[i] 是没有赋值的;当 i=2 时 arr[2] 的值是 1,当 i 是3或更大的值时,arr[i] 是没有值,应该默认是 nil 这样的表示不存在的值,所以是不可能大于 100 自然就不可能执行后面的语句。

if(arr[i]>100){
break;
}
只是跳出这一次循环,i++,再次进入下一个循环

根据你的赋值情况,arr[i] 不可能大于100,所以不会执行 if(arr[i]>100)中的语句

因为你在执行if(arr[i]>100)这个语句的时候,arr[i]本身是没有值的!!!(不信你debug试试),在你后面的语句赋值之后,他才有值。如果在c语言里面,你这种情况是属于非法指针调用的。

首先,arr[2]==2,在for循环的判断条件根据题应该是arr[i] < 100,应该先赋值后判断,把判断条件提出来,当不符合条件时跳出循环。

 package lianxi;

public class Feibonaqi {
    public static void main(String[] args) {
        int[] arr=new int [20];
        arr[0]=arr[1]=1;
        int sum=2;
        System.out.println("输出n<100的数列");
        System.out.print(arr[0]+" "+arr[1]);
        for(int i=2;;i++){
            arr[i]=arr[i-1]+arr[i-2];
            if(arr[i]>100)
                break;
            System.out.print(" "+arr[i]);
            sum+=arr[i];
        }
        System.out.println();
        System.out.println("求和");
        System.out.println(sum);
    }
}

你先判断a[i],但是a[i]此时是没有赋值的,默认为0

你把a[i] = a[i-1] + a[i-2]放到判断语句上面