【问题标题】:How to get a number from an array?如何从数组中获取数字?
【发布时间】:2019-05-07 15:11:46
【问题描述】:

问题:
假设这是我的数组中的数字{1,2,3,4,5,6,7,8} 每个数字都是一个位置,例如:: 1=1 ,2=2 , 3=3, 4=4, 5=5, 6=6, 7=7, 8=8

它不是数组位置,只是数字位置。现在我想删除奇数位置的数字然后它变成

2,4,6,8 :: 2=1, 4=2,  6=3,  8=4,

现在我想再次从奇数位置删除,所以它变成4,8 :: 4=1, 8=2

现在答案是8 那么如何得到这个8

代码:

int [] arr = new int [] {1, 2, 3, 4, 5, 6, 7, 8}; //I am taking certain number in array   
System.out.println("Elements of given array present on even position:"); 
for (int i = 1; i < arr.length; i = i+2) {   
          System.out.println(arr[i]);
}

必须将值设为 8,但在输出中我得到:

2 
2
2
2
4
4
4
4

等等

【问题讨论】:

  • 研究使用模数运算符
  • 所以简而言之,您希望数组的最后一个位置位于偶数索引上?因为这就是所有这些“消除可能性”总是会导致的结果。
  • 您需要一个模运算符 (%) 来识别奇数位置的数字和一个 while 循环(迭代 while array.length &gt;= 2
  • 注意:如果你使用for循环,你也可以不用模数来增加索引2而不是1
  • 在 Java 中,数组索引从 0 开始。

标签: java arrays


【解决方案1】:

这将打印出偶数:

for (int i = 0; i < arr.length; i++) 
 {   
      if (arr[i] % 2 == 0)
      {
          System.out.println(arr[i]);
      }
 }

如果要从数组中删除奇数位置元素,则新建一个并使用上述代码排除奇数元素,如下所示:

ArrayList<Integer> newArr = new ArrayList<>();
for (int i = 0; i < arr.length; i++) 
 {   
      if (i % 2 == 0)
      {
          newArr.add(arr[i]);
      }
 }

【讨论】:

  • 先生 1,2,3,4,5,6,7,8
  • 我不想删除只想在偶数位置打印元素,直到有单个数字
【解决方案2】:

正如我在评论中所说,你想要 2 的最大幂:

int max=0;
for (int i=0;i<arr.length;i++) {
   int pos = arr[i];
   if((pos & (pos-1)) == 0) { // check if pos is a power of 2
      max =java.lang.Math.max(max, pos);
   }
}
System.out.println(max)

如果 arr = {1,2,3,4,5,6,7,8}; => 输出 8

如果 arr = {1,2,3,4,5,6,7,8,9} => 输出 8

如果 arr = {1,2,3,...,20} => 输出 16

【讨论】:

  • 你给了我数组中的最高元素我想要数组中的偶数位置元素,例如 1,2,3,4,5,6,7,8 这里 i=1 到得到偶数 2,4,6,8 然后再次 j=1 然后我们得到 4,8 然后再次得到 k=1 我们得到 8 我想要这样但是如何进入循环??
【解决方案3】:

你可以使用 ArrayList

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

for(int i=0; i<arr.length; i++){
   if(i % 2 == 0){ //if divide by 2 gives remainder 0 it is even
   list.add(arr[i]);
   }
}
arr=list.toArray();//get the array version of the list

然后你可以把它放在一个while循环中,直到只剩下一个。

int [] arr = new int [] {1, 2, 3, 4, 5, 6, 7, 8};
while(arr.length>1){
...
}
System.out.println(arr[0]);

请记住,我们从 0 开始计数,所以第一个位置 (i=0) 是偶数,第二个位置 (i=1) 是不偶数。

最终代码:

int [] arr = new int [] {1, 2, 3, 4, 5, 6, 7, 8};
while(arr.length>1){
   ArrayList<Integer> list = new ArrayList<Integer>();

   for(int i=0; i<arr.length; i++){
      if(i % 2 == 0){ //if divide by 2 gives remainder 0 it is even
      list.add(arr[i]);
      }
   }
   arr=list.toArray();//get the array version of the list
}
System.out.println(arr[0]);

【讨论】:

  • 你可以,但是你必须事先计算运行代码的次数。使用 while 循环更容易。
  • while 循环只是一次又一次地执行代码,直到数组剩下一项。
  • 对不起,即使使用 while,我也没有得到单个号码
  • 你把for循环位放在while循环里面了吗?
  • 我还是不明白你为什么不只取最后一个元素
【解决方案4】:

这应该会为你做的

int [] arr = new int [] {1, 2, 3, 4, 5, 6, 7, 10, 11, 12}; //I am taking certain
        System.out.println("Elements of given array present on even position:");
        int counter=2;
        while(counter<=arr.length){
            counter*=2;
        }
        System.out.println(arr[(counter/2)-1]);

让我知道这是否有效

【讨论】:

  • 我没有得到输出,就好像我在 8 点之前输入数组一样
  • @SwagnashThor 现在应该没问题了。请检查并告诉我
  • 不,先生,如果我从 1-8 中获取 arr 的元素,它不能在最后一个元素中引入一个元素
  • 好吧,根据我之前的回答,我试图向您展示如何在不使用另一个数组的情况下导出输出,但由于您需要单个输出,因此此代码 sn-p 现在打印单个输出对于你的问题。让我知道这是否适用于您的情况。
猜你喜欢
  • 1970-01-01
  • 2019-01-05
  • 2015-03-26
  • 2019-07-16
  • 2013-04-23
  • 1970-01-01
  • 2011-01-22
  • 2021-05-02
相关资源
最近更新 更多