【问题标题】:How to determine if an array index is even? [duplicate]如何确定数组索引是否为偶数? [复制]
【发布时间】:2017-04-13 22:06:21
【问题描述】:

我正在做一个作业,我必须逐行填充一个二维数组。如果该行的索引值为偶数(0、2、4 等),则该行必须从从右到左填充。如果该行的索引值是不均匀(1、3、5 等...),那么它必须从从左到右 填充。我应该在 if 语句中添加什么条件才能以这种方式交替填充行?

谢谢!

【问题讨论】:

  • i%2==0 会检查
  • if (index & 1) { /* It's odd */ }

标签: java arrays if-statement multidimensional-array


【解决方案1】:

正如我不知道如何引用的奇怪名称的用户(抱歉,请随时在此处编辑您的名称)指出,i%2==0 应该可以解决问题。

%(模)运算符返回整数除法的余数,因此如果行号是偶数,您可以将其除以 2 并且没有余数 (i%2==0)

int[][] toBeFilled = new int[width][height];
for(int i=0;i<width;i++) {
    if(i%2==0)
        //Fill toBeFilled[i] from Right to Left
    else
        //Fill toBeFilled[i] from from Left to Right
}

【讨论】:

    【解决方案2】:

    您需要使用模或余数运算。假设 i 是一个奇数,因此 i%2 将评估为 1。对于偶数 i%2 将导致 0。正如评论中指出的,使用条件 if (row_index % 2 == 0) {*do right to left thing*} else {do right to left thing}.

    【讨论】:

      【解决方案3】:

      这是一个可能有帮助的代码示例。请注意,这是 C#(我现在不是坐在 Java 编译器前面),所以有一些非常小的语法差异,但它应该仍然很可读。

          private static int[][] BuildArrays()
          {
              Random random = new Random();
      
              // Whatever size you want
              int[][] array = new int[random.Next(1, 100)][];
      
              for (int i = 0; i < array.Length; i++)
              {
                  // Make an array of whatever size you want
                  array[i] = new int[random.Next(1, 50)];
      
                  // % is the modulo operator
                  // Basically, this means "remainder when the index is divided by 2"
                  // By definition, even numbers are evenly divisible by 2 and odd numbers aren't
                  if (i % 2 == 0)
                  {
                      // Even - we fill right to left
                      for (int j = array[i].Length - 1; j >= 0; j--)
                      {
                          // Enter whatever you want
                          array[i][j] = random.Next();
                      }
                  }
                  else
                  {
                      // Odd - we fill left to right
                      for (int j = 0; j < array[i].Length; j++)
                      {
                          array[i][j] = random.Next();
                      }
                  }
              }
      
              return array;
          }
      

      【讨论】:

        猜你喜欢
        • 2020-02-01
        • 1970-01-01
        • 2011-02-07
        • 1970-01-01
        • 1970-01-01
        • 2017-10-03
        • 2013-10-22
        • 1970-01-01
        • 2014-10-06
        相关资源
        最近更新 更多