goto和junping循环循环c ++

时间:2018-11-16 20:27:13

标签: c++ for-loop if-statement while-loop goto

在这里给新的程序员和用户一个新的名字。 我不想在代码中使用goto,因为我不想被称为“不好的程序员”。 我需要你的经验来摆脱它。

var obj = {
    "seamark:name": "Z-2",
    "seamark:type": "buoy_lateral",
    "seamark:light:range": "5",
    "seamark:light:colour": "red",
    "seamark:light:character": "Q",
    "seamark:radar_reflector": "yes",
    "seamark:buoy_lateral:shape": "can",
    "seamark:buoy_lateral:colour": "red",
    "seamark:buoy_lateral:system": "iala-a",
    "seamark:buoy_lateral:category": "port"
}


let newObj = {}
for(let [key, val] of Object.entries(obj)) {
  let keys = key.split(':')
  
  keys.reduce((o, d, i) => (
       i == keys.length - 1 
         ? (o[d] = val) 
         : (o[d] = o[d] || {})
       , o[d])
    , newObj)
}

console.log(newObj)

screenshot

3 个答案:

答案 0 :(得分:1)

无需创建函数,将“ goto”替换为“ j = -1;”

答案 1 :(得分:0)

只需将come块(内部for循环)替换为一个函数。然后,您调用goto come而不是come()(假设函数的名称为“ come”)。

答案 2 :(得分:0)

替换

come:
    for (int j = 0; j < i; j++)
    {
        if (a[i] == a[j])
        {
            if (i % 2 == 0)
            {
                a[i] = 65 + rand() % 26;    goto come;
            }
            else
            {
                a[i] = 97 + rand() % 26;    goto come;
            }
        }
        else
            continue;
    }

使用

int loop=0;
do
{
    for (int j = 0; j < i; j++)
    {
        if (a[i] == a[j])
        {
            if (i % 2 == 0)
            {
                a[i] = 65 + rand() % 26;
            }
            else
            {
                a[i] = 97 + rand() % 26;
            }
            loop=1;
            break;
        }
        else
            loop=0;
    }
}while(loop);

这是比其他答案更通用的解决方案。这是基于以下认识:找到匹配项(a[i] == a[j])时,您只想从顶部开始再次运行主for循环。 (您可以通过将j设置为-1来获得相同的结果,但这并非在所有情况下都有效,并且在j需要为unsigned的情况下肯定不是)