在我的代码上创建无限循环的问题在哪里



im创建一个函数,该函数用于查找与'HOH'相同的字符串,形成一个数组初始数组:['H','B','C','N','O','F'];此外,我需要找出创建这样的字符串需要多少次。

我的逻辑是这样的:

  1. 获取数组并将其替换为数字表示
  2. 随机索引,所以每次运行时,每个索引都会得到一个不同的值。3.将随机数组替换回字符串
  3. 然后从数组中切片一个3个字符,将它们转换为字符串,然后进行比较
  4. 创建一个couner var,当我调用时,字符串将为+1
  5. 因为每次跑步我都会得到不同的随机字符串,所以我很难跑一段时间
  6. 我陷入了一个无限循环,我找不到我的问题在哪里
console.log(atoms()); 
function atoms() {
var counter=0;
var atoms = ['H','B' ,'C', 'N' ,'O', 'F'];
var atomsStr = atoms.join('');
var getAtoms=[];
var idx=0;
var  strSlice=[]; // =''
for (var i = 0; i < atomsStr.length; i++) {
getAtoms.push(atomsStr.charCodeAt(i)) ;
}  
while (strSlice !=='HOH') {
for (var j = 0; j < getAtoms.length; j++) {
idx = getRandomIntInclusive(0,getAtoms.length-1);
getAtoms[idx] = getAtoms[j];
}
for (var k = 0; k < getAtoms.length; k++) {
getAtoms.splice(k,1,String.fromCharCode(getAtoms[k]))
}
counter++;
strSlice = getAtoms.slice(3).join('');
}
console.log(counter);
return  strSlice ; 
}

function getRandomIntInclusive(min, max) {
min = Math.ceil(min);
max = Math.ceil(max);
return Math.floor(Math.random() * (max - min + 1) + min);
}

真的很感谢你的帮助。非常感谢。关于更有效的方法或我犯过的其他错误,任何其他建议都欢迎。

您必须改进您的方法
为了一个简单的问题,你要处理很多变量,首先,不要像这样使用charCode,只需创建一个函数来从数组中获取随机元素,这就是容易高效可理解的方法。

下次,在代码中添加更多注释来解释您要做的事情;(

看看这个简单的脚本,它可以根据您的需要工作:

function atoms() {
let attemptsNumber = 0,
found = false;
const baseAtoms = ['H', 'B', 'C', 'N', 'O', 'F'];
while (!found) {
attemptsNumber++;
shuffledArray =
getRandomItemFromArray(baseAtoms) +
getRandomItemFromArray(baseAtoms) +
getRandomItemFromArray(baseAtoms);
// console.log(shuffledArray);
found = shuffledArray === 'HOH';
}
return attemptsNumber;
}
// Fonction to get a random item from an passed arrays
// https://www.programiz.com/javascript/examples/get-random-item
function getRandomItemFromArray(array) {
return array[Math.floor(Math.random() * array.length)];
}
// OUTPUT RESPONSE
console.log(atoms());

最新更新