2017-02-20 6 views
2

カラージェネレータを作成しようとしていて、問題が発生しました。私がこれをやっているやり方は、1から15までの6つの乱数を生成することです。もしその数が9以下であれば、その値は保持されますが、9より大きい場合には "a" B」、 "C" などスイッチはクリック時に変数を変更しません

あなたがここに私のCodePenを見ることができます:http://codepen.io/TheAndersMan/pen/vgqgqm?editors=0011

そして、ここでは私はJavaScriptである:

document.querySelector("button").addEventListener("click", function() { 
    let num1 = Math.floor((Math.random() * 15) + 1); 
    let num2 = Math.floor((Math.random() * 15) + 1); 
    let num3 = Math.floor((Math.random() * 15) + 1); 
    let num4 = Math.floor((Math.random() * 15) + 1); 
    let num5 = Math.floor((Math.random() * 15) + 1); 
    let num6 = Math.floor((Math.random() * 15) + 1); 
    console.log(num1, num2, num3, num4, num5, num6) 
    let hex = function(num) { 
    if (num <= 9) { 
     num = num; 
    } else if (num === 10) { 
     num = 'a' 
    } else { 
     switch (num) { 
     case 10: 
      num = "a"; 
      break; 
     case 11: 
      num = "b"; 
      break; 
     case 12: 
      num = "c"; 
      break; 
     case 13: 
      num = "d"; 
      break; 
     case 14: 
      num = "e"; 
      break; 
     case 15: 
      num = "f"; 
     }; 
    }; 
    }; 
    hex(num1); 
    hex(num2); 
    hex(num3); 
    hex(num4); 
    hex(num5); 
    hex(num6); 
    console.log(num1, num2, num3, num4, num5, num6) 
}) 

スイッチがない理由だから私は把握することはできません数字を文字列に変更します。誰かが私にそれが何であるか教えてくれればそれはすばらしいことでしょう!

+0

:ここ

はあなたのコードの楽しみの簡易版です。 – fubbe

+0

変数 'num'に値を代入していますが、' num1'、 'num2'などを記録しています。また: 'number.toString(16);' – LuudJacobs

答えて

1

、値と値自体に参照の間に違いがあります。 hexに元の値を渡しているので、値は変更されますが、の内部にはの内部には参照先のメモリが格納されていないため、関連するメモリ値はnum1に格納されません。番号はで、変数ではありません。値を返し、変数に再度割り当てる必要があります。また

document.querySelector("button").addEventListener("click", function() { 
 
    let num1 = Math.floor((Math.random() * 15) + 1); 
 
    let num2 = Math.floor((Math.random() * 15) + 1); 
 
    let num3 = Math.floor((Math.random() * 15) + 1); 
 
    let num4 = Math.floor((Math.random() * 15) + 1); 
 
    let num5 = Math.floor((Math.random() * 15) + 1); 
 
    let num6 = Math.floor((Math.random() * 15) + 1); 
 
    console.log(111, num1, num2, num3, num4, num5, num6) 
 
    let hex = function(num) { 
 
     switch (num) { 
 
     case 10: 
 
      return "a"; 
 
     case 11: 
 
      return "b"; 
 
     case 12: 
 
      return "c"; 
 
     case 13: 
 
      return "d"; 
 
     case 14: 
 
      return "e"; 
 
     case 15: 
 
      return "f"; 
 
     default: 
 
      return num; 
 
     }; 
 
    }; 
 
    num1 = hex(num1); 
 
    num2 = hex(num2); 
 
    num3 = hex(num3); 
 
    num4 = hex(num4); 
 
    num5 = hex(num5); 
 
    num6 = hex(num6); 
 
    console.log(num1, num2, num3, num4, num5, num6) 
 
})
<button>Click</button>

さておき、小さな、しかしletはそうvarを使用することが最も有効な方法ですが、関数ではありませんブロック内でのみを使用する必要があります。したがって、別のブロック内にいない場合は、letの代わりにvarを使用してみてください!あなたの関数はNUMを返す必要

var hexCharacters = [0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f']; 
 

 
function randomHex(optionalLength = 6){ 
 
    // Use `var` here since we are at the top-level inside this function 
 
    var all = []; 
 
    while(all.length < optionalLength){ 
 
    // Use `let` here as we are inside a block inside the function 
 
    let randomIndex = Math.floor(Math.random() * hexCharacters.length); 
 
    all.push(hexCharacters[ randomIndex ]); 
 
    } 
 
    // Any `let` declared in a block is no longer available here 
 
    return all; 
 
} 
 

 
document.querySelector('button').addEventListener('click', function(){ 
 
    document.querySelector('div').textContent = randomHex(6).join(''); 
 
})
<button>Random HEX!</button> 
 
<div></div>

+1

コードがどれくらい効率的であるか狂気です。 – TheAndersMan

1

あなたはnum

で何もしないので、これを試してみてください:プログラミングで

document.querySelector("button").addEventListener("click", function() { 
 
    let num1 = Math.floor((Math.random() * 15) + 1); 
 
    let num2 = Math.floor((Math.random() * 15) + 1); 
 
    let num3 = Math.floor((Math.random() * 15) + 1); 
 
    let num4 = Math.floor((Math.random() * 15) + 1); 
 
    let num5 = Math.floor((Math.random() * 15) + 1); 
 
    let num6 = Math.floor((Math.random() * 15) + 1); 
 
    console.log(num1, num2, num3, num4, num5, num6) 
 
    let hex = function(num) { 
 
    if (num <= 9) { 
 
     num = num; 
 
    } else if (num === 10) { 
 
     num = 'a' 
 
    } else { 
 
     switch (num) { 
 
     case 10: 
 
      num = "a"; 
 
      break; 
 
     case 11: 
 
      num = "b"; 
 
      break; 
 
     case 12: 
 
      num = "c"; 
 
      break; 
 
     case 13: 
 
      num = "d"; 
 
      break; 
 
     case 14: 
 
      num = "e"; 
 
      break; 
 
     case 15: 
 
      num = "f"; 
 
     }; 
 
    }; 
 
    
 
    return num; 
 
    }; 
 
    num1 = hex(num1); 
 
    num2 = hex(num2); 
 
    num3 = hex(num3); 
 
    num4 = hex(num4); 
 
    num5 = hex(num5); 
 
    num6 = hex(num6); 
 
    console.log(num1, num2, num3, num4, num5, num6) 
 
})

関連する問題