首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >整数数组上的Java操作

整数数组上的Java操作
EN

Stack Overflow用户
提问于 2018-06-11 07:41:30
回答 1查看 289关注 0票数 -2

我正在考虑Java中的一个整数数组。数组大小由用户在程序开始时确定

我的想法是-给定相应二进制值的任何位置-结果应该显示1表示任何位,其中只有一个操作数具有1,而0表示任何其他组合。下面的例子可以更好地解释这个过程

像{4,5,6}这样的数组应该返回3,因为:

代码语言:javascript
复制
  100
  101
  110
  ---
= 011

或者数字{12,4,9}

代码语言:javascript
复制
12 = 1100
 4 = 0100
 9 = 1001
---------
Val- 0001

我想这样做,但我意识到-因为我使用XOR -我的第一个例子的代码将返回7:

代码语言:javascript
复制
static void cpuTurn(int[] nimArray){
    int[] val = new int[nimArray.length];
    int holding = 0;

    for (int i = 0; i < nimArray.length; i++) {
        holding = holding^nimArray[i];
    }
}

如何正确实现此操作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-11 07:51:07

这样理解:

代码语言:javascript
复制
holding = 0
at 4:
holding = holding ^ 4; // 0 ^ 4 = 4 i.e. holding = 4, binary => 0 ^ 100 = 100  
at 5:
holding = holding ^ 5; // 4 ^ 5 = 1 i.e. holding = 1, binary => 100 ^ 101 = 1 
at 6:
holding = holding ^ 6; // 1 ^ 6 = 7 i.e. holding = 7, binary => 1 ^ 110 = 111 

因此,持有的最终值是7。

如果要将两个以上的1外观设置为0

代码语言:javascript
复制
    public static int[] split(int num){
        int[] splits = new int[31]; 
        for(int i=0; i < 31; ++i){
            splits[i] = (num>>i & 1);
        }
        return splits;
    }

    static void cpuTurn(int[] nimArray){
        int[] val = new int[nimArray.length];
        int holding = 0;
        int [] holdings = split(holding);
        for (int i = 0; i < nimArray.length; i++) {
            int [] splits = split(nimArray[i]);
            for(int j = 0; j < splits.length; ++j)
                 holdings[j]+=splits[j]
        }

        int [] newVal = new int[31];
        int k =0;
        for(k = 0; k < 31; ++k)
            if(holdings[k]>1 || holdings[k]==0)
                newVal[k] = 0;
            else
                newVal[k] = 1;

        int finalValue = 0;
        for(k = 0; k < 31; ++k)
             finalValue |= newVal[k]<<k;

        System.out.println(finalValue);

    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50788976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档