java如何用foreach输出数组里的数

package exercise;

public class qwe {

    public static void main(String[] args){
        int[] a = new int[22];
        for(int i=0,j=-6; i<a.length&&j<=38; j++) {

            if(j%2==1) {
                a[i]=j;

            }

        
        }
    }
}

int[] a = new int[22];
        for(int i=0, j = -6; i < a.length && j <= 38; i++, j++) {
            if(j % 2 == 1) {
                a[i]=j;
            }
        }
        System.out.println(Arrays.toString(a));

你的i始终不变是0,所以数组中只能给第一个元素赋值;其次你断点一下就会发现负数取余2等于0

首先 i < a.length 会allways true, 应添加i++或者去除该逻辑语句

第一种结果:注释 i < a.length 逻辑

  1. 剩下的问题就是由于i没有变化, 一直都是0, 所以是一直对a数组的第[0]个元素进行赋值
  2. 由于是取模计算, 赋值的时候在负数阶段不会进入(j%2==1)的判断
  3. 在正数的时候, 只有奇数会符合判断并且赋值给a[0], 比如:1、3、5、7...
  4. 最终程序的执行结果就是a[0]=37, 其余的元素都是int的默认值:0

 

foreach(增强for循环输出数组的值):

public class qwe {
    public static void main(String[] args){
        int[] a = new int[22];
        for(int i=0,j=-6; /*i<a.length&&*/j<=38; j++) {
            if(j%2==1) {
                a[i]=j;

            }


        }
        for (int i: a) {// 使用增强for循环输出数组a的值
            System.out.println(i);
        }
    }
}

附上执行结果:

第二种结果:添加i++, 让i自增变化

  1. 同样由于是取模计算, 赋值的时候在负数阶段不会进入(j%2==1)的判断, 所以这部分的循环:a[0]~a[5]的值都是0
  2. 在正数的时候, 只有奇数会符合判断并且 间隔 赋值给a数组, 比如:a[6]=0、a[7]=1、a[8]=0、a[9]=3...
  3. 随着i++和j++的变化, (i<a.length)的条件会先比(j<=38)的条件先为true, 所以在i自增至21, 同时j自增至21+(-6)=15时, 循环结束

 

第二种修改方式:

public class qwe {
    public static void main(String[] args){
        int[] a = new int[22];
        for(int i=0,j=-6; i<a.length&&j<=38; i++, j++) {
            if(j%2==1) {
                a[i]=j;

            }


        }
        for (int i: a) {// 使用增强for循环输出数组a的值
            System.out.println(i);
        }
    }
}

同样附上第二种的执行结果:

但如果题主想要的是"想输出-6到38的奇数", 提供的解决方案:

考虑到:"负数有奇偶性吗?负数有没有奇偶之分"

有人回答:

也有不同的回答:

便有了以下编码:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class qwe {

    private static final String YES = "Y";
    private static final String NO = "N";

    public static void main(String[] args) {
        System.out.println("你同意负整数中区分奇偶数么?(Y/N):");
        Scanner scan = new Scanner(System.in);
        String answer = scan.nextLine();
        boolean flag = false;// 负值时是否需要转为绝对值
        switch (answer.toUpperCase()) {// 输入转大写
            case YES:
                flag = true;
                break;
            case NO:
                break;
            default:
                System.out.println("检测到输入有误(非Y/N)! 输入值是:[" + answer + "], 默认负值时不进入判断");
                break;
        }
        List<Integer> a = new ArrayList<>();// 结果列表
        for (int i = -6; i <= 38; i++) {// 循环条件: 在 -6 到 38中寻找[奇数]
            int temp = i;
            if (flag) {// 为true则需要转为绝对值
                temp = Math.abs(i);
            }
            if (temp % 2 == 1) {
                a.add(i);
            }
        }
        System.out.println("结果:" + Arrays.toString(a.toArray()));
    }
}

各种情况的执行结果:

"负数分奇偶"版:

"负数无奇偶"版:

"我不知道啊"版:

最后, 编辑不易, 望采纳

Arrays.asList(a);
package exercise;

public class qwe {
	public static void main(String[] args) {
		int[] a = new int[22];
		for (int i = 0, j = -6; i < a.length && j <= 38; j++) {
			if (j % 2 == 1) {
				a[i] = j;
			}
		}
		for (int e : a) {
			System.out.println(e);
		}
	}
}

 

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y