【问题标题】:How do I modify this code to make every even number index in an array true?如何修改此代码以使数组中的每个偶数索引都为真?
【发布时间】:2013-12-27 06:13:00
【问题描述】:

这是我所拥有的:

  boolean[] even = new boolean[array.length];
  for (int i = 0; i < array.length; i++) {
      even[i] = (array[i] % 2) == 0;
  }

我希望索引(0,2,4,6,8,etc) 为真,索引(1,3,5,7,9,etc) 为假

我认为这段代码对我想要做的事情更准确,但它不会编译。

  for(int i = 0; i < array.length ; i++) {
      int val = (array[i] % 2);
      if(val == 0)
          array[i] = true;
      else
          array[i] = false;
  }

【问题讨论】:

  • 我猜你应该更正 array[i] % 2 in i % 2。
  • 你想要i % 2 而不是array[i] % 2,确定吗?

标签: java arrays loops for-loop boolean


【解决方案1】:

你的代码可以修改如下:

 for(int i = 0; i < array.length ; i++) {

  if(array[i]%2==0)
      even[i] = true; //assign to even , not array
  else
      even[i] = false; //assign to even, not array
  }

得到你想要的。

【讨论】:

    【解决方案2】:

    在第一个示例中,您正在写入数组even,它是一个布尔数组。

    在第二个示例中,您正在写入数组 array,该数组(虽然未显示)必须是整数数组,因为这是您从中读取整数的位置。

    试试:

    for(int i = 0; i < array.length ; i++)
    {
        int val = (array[i] % 2);
        if(val == 0)
            even[i] = true;
        else
            even[i] = false;
    }
    

    【讨论】:

      【解决方案3】:

      试试这个;

      for(int i = 0 ; i<array.length ; i++){
          if(i % 2 == 0){
              array[i] = true;
          }
          else{
              array[i] = false;
          }
      }
      

      【讨论】:

        【解决方案4】:

        您可以使用一些循环展开和优化循环,而不是执行模数和分支这两种昂贵的操作。

        boolean[] even = new boolean[array.length];
        for (int i = 0; i < array.length; i += 2) {
            even[i] = true;
            // not needed as boolean[] are set to all false by default
            // even[i+1] = false;
        }
        

        顺便说一句,boolean[] 在大多数平台上每个值使用一个 byte。更有效的方法可能是使用 BitSet。

        BitSet even = new BitSet(array.length);
        for (int i = 0; i < array.length - 1; i += 2)
             even.set(i);
        

        这将只使用 1/8 的内存。

        【讨论】:

          【解决方案5】:

          你的错误真的很小:

          你不是在检查你的索引是否能被 2 整除,而是检查数组中的值是否能被 2 整除。

          boolean[] even = new boolean[array.length];
          for(int i = 0; i < even.length ; i++)
          {
          if(i % 2 == 0)
              even[i] = true;
          else
              even[i] = false;
          }
          

          编辑:显然每个人回答的时间都差不多,现在我们有七十个相同的答案。

          【讨论】:

            【解决方案6】:

            在第一个sn-p中,改变:

              even[i] = (array[i] % 2) == 0;
            

            到:

              even[i] = (i % 2) == 0;
            

            在第二个sn-p中,改变:

            int val = (array[i] % 2);
            

            到:

            int val = i % 2;
            

            【讨论】:

            • BTW &amp; 1% 2 快很多
            【解决方案7】:

            您需要使用even[i] = true 而不是array[i] = true。我假设数组是一个整数数组,甚至是一个布尔值数组。因此,您需要将布尔值分配给布尔数组的索引。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-10-21
              • 2016-02-20
              • 1970-01-01
              • 2011-06-24
              • 1970-01-01
              • 1970-01-01
              • 2019-07-05
              相关资源
              最近更新 更多