打印数组的奇数和偶数元素

时间:2017-03-12 20:18:10

标签: java arrays user-input

我试图编写一个读取整数序列并将其分成两个序列的程序。奇数位置上的值将是第一个序列,偶数位置的值将是第二个序列。程序打印第一个序列的元素,然后打印由单个空格分隔的第二个序列的元素。第一个输入值指定元素的数量。

输入:7 1 2 4 5 6 8 9

预期输出:1 4 6 9 2 5 8

我的输出:2 0

package twosequences;

import java.util.Scanner;

public class TwoSequences {

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int[] values = new int[n];
    for (int i = 0; i < values.length; i ++) {
        values[i] = sc.nextInt();
    }
    int odd = 0;
    int even = 0;
    int i = 1;
    if (i % 2 == 0) {
        even = values[i];
    } else {
        odd = values[i];
    }
    i++;
    System.out.printf("%d %d%n", odd, even);        
  }


}

我不确定为什么输出2 0。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

您需要两个不同的循环来分别迭代偶数和奇数元素以获得所需的输出。

for (i = 0 ; i < n ; i += 2) {
    even = values[i];
    System.out.printf("%d ", even);
}
for (i = 1 ; i < n ; i += 2) {
    odd = values[i];
    System.out.printf("%d ", odd);
}

希望这有帮助。

答案 1 :(得分:1)

在一个循环中打印偶数元素;然后使用另一个循环来打印奇数元素。

System.out.print(values[0]); // print by itself to avoid prepending " ".
for (int i = 2; i < values.length; i += 2) {
  System.out.print(" " + values[i]);
}
for (int i = 1; i < values.length; i += 2) {
  System.out.print(" " + values[i]);
}
System.out.println();

答案 2 :(得分:1)

你接受数组的第二个元素(2),只有那个你正在检查它是否均匀。 结果适用于第一个&#39; if&#39;和

even = 2;

,if语句结束,奇数保持为声明(0),&#39;为什么你得到这样的结果。 如果您希望输出多于2个整数,则需要更改 ,其中n将全部扫描偶数。 尝试将计数器置于第一个for循环中,例如

for (int i = 0; i < values.length; i ++) {
            values[i] = sc.nextInt();
            if(values[i]%2==0) evenCounter++;
        }

现在计算赔率只计算values.length - evenCounter。

此外,您不需要像int []那样制作简单的数组,您可以使用

List<Integer> list = new ArrayList<>();

您将能够在知道要实现的元素数量的情况下在for循环中添加元素。

希望其中一些帮助。