【问题标题】:Fill array with odd numbers用奇数填充数组
【发布时间】:2015-10-17 09:04:53
【问题描述】:

我必须用奇数范围(此处为n)填充一个数组:1,3,5,7,9...但我总是在每个奇数之间有一个 0,我不明白为什么。

注:cmets中大写字母下的代码是我们教授给的……

代码如下:

public class F5B1 {

    public static java.util.Scanner scanner = new java.util.Scanner(System.in);

    public static void main(String[] args) {

        // Creation of Array : DON'T CHANGE THIS PART OF THE PROGRAM.
        System.out.print("Entrez n : ");
        int n = scanner.nextInt();
        int[] t = new int[n];
        int i;


        // fill the array : PART OF THE PROGRAM TO FULFILL
        // INSTRUCTIONS :
        // ADD NO ADDITIONAL VARIABLES
        // DON'T USE ANY OF THE MATH METHODS
        // DON'T ADD ANY METHODS

        // I wrote this piece of code
        for (i = 0; i < t.length; i++) {
            if (i % 2 != 0) {
                t[i] += i;
            }
        }

        // display of the array : DON'T CHANGE THIS PART OF THE PROGRAM

        System.out.println("Those are the odd numbers : ");
        for (i = 0; i < t.length; i++) {
            System.out.println(t[i]);
        }
    }

}

输出:

Enter n : 10
Those are the odd numbers : 
0
1
0
3
0
5
0
7
0
9

【问题讨论】:

  • 你也可以发布输出吗?
  • 是的,我当然会这样做
  • 你的教授让你在 for 循环外声明 i 是在给你不好的建议

标签: java


【解决方案1】:

对于每个偶数索引,您将获得 0,因为该索引处的值从未设置过。

这一行:

int[] t = new int[n];

声明一个长度为 n 的 int 数组,其中每个元素都初始化为 0。现在考虑您的代码:

for (i = 0; i < t.length; i++) {
    if (i % 2 != 0) {
        t[i] += i;
    }
}

您是说:当我的数组的索引为奇数时,让我们将其设置为该索引,否则,什么都不做(并保持 0)。这解释了你得到的结果。

您要做的不是检查数组的索引是否为奇数:您想为数组的每个索引设置一个奇数。请考虑以下代码:

for (i = 0; i < t.length; i++) {
    t[i] = 2 * i + 1;
}

对于每个索引,这会将数组的值设置为奇数(2n+1 始终为奇数)。

(注意我写的是=而不是+=:它更好地表达了意图,并且不依赖于数组初始化为0的事实)

【讨论】:

  • 太棒了,非常感谢您的快速回答! :) 我现在明白我的错误了
【解决方案2】:

使用 Java 8,IntStream 很简单:

IntStream.range(0, n).filter(element -> element % 2 != 0)
                    .forEach(System.out::println);

用法:

public class F5B1 {

    public static java.util.Scanner scanner = new java.util.Scanner(System.in);

    public static void main(String[] args) {
        System.out.print("Entrez n : ");
        int n = scanner.nextInt();
        IntStream.range(0, n).filter(element -> element % 2 != 0)
                .forEach(System.out::println);
    }
}

【讨论】:

  • 问题是答案重写了教授代码的一部分。
【解决方案3】:

试试这个:

int odd = 1;
for (int i = 0; i < t.length; i++) {
    t[i] = odd;
    odd += 2;
}

问题在于:

int[] t = new int[n];

将创建一个用零填充的数组。在您的 for 循环中,您将设置奇数,因此其他数为零。

【讨论】:

  • 感谢您的帮助!
【解决方案4】:

for (i = 0; i

【讨论】:

  • 代码答案很好,但您能否添加一些文字来解释为什么您认为这是一个很好的解决方案?此外,您的解决方案只填满了数组的一半。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
  • 2012-08-04
  • 2018-02-01
相关资源
最近更新 更多