【问题标题】:If any of these variables equals this, corresponding variable does this. How to code this?如果这些变量中的任何一个等于此值,则相应的变量会执行此操作。如何编码?
【发布时间】:2013-11-09 03:45:45
【问题描述】:

如果这个问题被重复,我很抱歉,但我找不到答案。 我的问题是如何为“如果这些变量中的任何一个等于这个”进行编码并将其更改为与该变量对应的新值。例如,我正在尝试进行 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、...)?

【问题讨论】:

  • 看起来您知道数组是什么,因为您在代码中使用了数组。那么也许您可以利用这些知识来回答您的最后一个问题?
  • 当然是,看看here
  • 这里的代码和伪代码不匹配...
  • 假设您有一个通用的问题解决者,然后您将每个问题与原因映射到某个位置。然后你使用原因和位置来交替行为,比如多态开关。
  • 那么,像var = applyMath(var, &lt;math&gt;) 一样,applyMath 只是一个返回修改后的 var 的 switch 语句? (字符串是不可变的,所以你必须在函数返回时更新变量)

标签: java variables loops optimization


【解决方案1】:

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

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】:

    试试这样的:

    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
    

    【讨论】:

      【解决方案3】:

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

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

      等等……

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        • 2019-06-03
        • 2013-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多