Java的常见问题,exception

img


麻烦看看这样写为什么错了,然后要怎么改。感激不尽,问题是求1000以内能被7或11整除,但不能同时被7和11整除的数,存放到数组xx中。

应该是数组没有分配空间有关,另外判断整除那里需要把n改为i,修改如下:


public class text {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int n=1000;
        int num=0;
        for(int element:fun(n)) {
            System.out.print(element+" ");
            num++;
            if(num%15==0) { //每隔15个换行,让结果显示更整洁
                System.out.println();
            }
        }
    }
    
    public static int [] fun (int n) {
        
        int [] shu = new int[n]; //为数组分配空间
        
        int i;
        int shuzu_n=0;
        for(i=7;i<=n;i++) {
            
            if((i%7==0)||(i%11==0)) {
                shu[shuzu_n]=i;
                shuzu_n++;
            }
            
            if((i%7==0)&&(i%11==0)) {
                shuzu_n--;
                continue;
            }
        }
        
//        for(int element:shu) {
//            System.out.print(element+" ");
//        }
        
        int [] result = new int[shuzu_n];
        i=0;
        //把数组里面的0去掉
        for(int element:shu) {
            if(element>0) {
                result[i]=element;
                i++;
            }else {
                break;
            }
        }
        
        return result;
    }

}

img

是i%7,不是n%7
你传进来的n没有用
除非你是想拿n代替1000
-=-=-=-
另,逻辑太复杂,没必要搞什么continue
直接if(i%77!=0 && (i%7==0) || (i%11==0))

数组shu没初始化吧,你得new一下。
int[] shu = new int[1001];
程序逻辑也不对,参考另一位的回答。

你这是空指针异常,因为你的fun()方法的返回值是null;为null的原因是你往shu数组里增加元素的方法不对,,而且一般数组是不能添加元素的,因为他们在初始化时就已定好长度了,不能改变长度。换成集合如ArrayList试下

直接用ArrayList

public static void main(String[] args) {
        List<Integer> arr = new ArrayList<>();
        int shuzu_n = 0;
        for (int i = 0; i < 1000; i++) {
            if (!(i % 7 == 0 && i % 11 == 0)) {
                if (i % 7 == 0 || i % 11 == 0) {
                    arr.add(i);
                }
            }
        }
        System.out.println(arr);

    }