如果这些变量中的任何一个等于this,则相应的变量执行此操作。如何编码?

时间:2013-10-29 19:32:43

标签: java variables loops optimization

如果重复这个问题,我很抱歉,但我找不到答案。 我的问题是如何编写“如果这些变量中的任何一个等于此”并将其更改为与该变量对应的新值。例如,我正在尝试进行HTML转换:

        int hex1 = (int)(Math.floor((work[j][k]) / 1048576)) % 16;
        int hex2 = (int)(Math.floor((work[j][k]) / 65536)) % 16;
        int hex3 = (int)(Math.floor((work[j][k]) / 4096)) % 16;
        int hex4 = (int)(Math.floor((work[j][k]) / 256)) % 16;
        int hex5 = (int)(Math.floor((work[j][k]) / 16)) % 16;
        int hex6 = (int)(work[j][k]) % 16;

上面是我的多个变量列表。所以伪代码将是“如果以上任何变量等于此”。因此,如果hex1,hex2,hex3,hex4,hex5,hex6等于10,那么相应的变量会做一些事情。例如:

         String html = "";
           if (hex1==10){
              html += "A";
           }
           else if (hex1==11){
              html += "B";
           }
           else if (hex1 >= 0 && hex1 <=9){
              html += hex1;
           }
        html = "#" + html;

有没有办法在上面的代码中执行此操作,而无需每次使用不同的变量复制/粘贴代码6次(即,hex1将是hex2,hex3,...)?

3 个答案:

答案 0 :(得分:0)

您可以使用不同的变量值创建一个函数并调用它:

void doSomething(int in){
 // put your logic here
}

doSomething(hex1);
doSomething(hex2);

依旧......

答案 1 :(得分:0)

是的,您正在寻找地图。在您的情况下使用Map<Integer, String>。然后你可以这样做:

Map<Integer, String> map = new HashMap<Integer, String>();
map.put(10, "A");
map.put(11, "B");
String str = map.get(hex5);
if (str != null)
{
    html += str;
}

请使用数组,而不是hex1hex2hex3hex4等...创建一个简单的:

int[] hex = new int[6];

接下来,您可以将这些行优化为以下内容:

int hex5 = (int)(Math.floor((work[j][k]) / 16)) % 16;

将是:

int hex5 = (work[j][k] >> 4) & 0xF;
假设work[j][k]是整数,

速度要快得多。

答案 2 :(得分:0)

尝试这样的事情:

int[] hex = new int[6];

//code to fill in hex digits

for(int i = 0; i < hex.length;i++){
    if(hex[i]==10){
        //do stuff
    }else if(hex[i]==11){
        //do stuff
    }
   //other conditions

}

编辑: 或者您可以使用列表包含任意数量的十六进制数字,如下所示:

List<Integer> hexList = new ArrayList<Integer>();

//code to add hex digits to list

if(hexList.contains(10)){
//do stuff
}else if(hexList.contains(11)){
//do stuff
}
//other conditions