#javascript #p5.js
#javascript #p5.js
Вопрос:
Я пытаюсь написать некоторый код для интерпретации языка кодирования в файле .txt. Я написал функцию для предварительного форматирования кода, но при попытке использовать функцию происходит сбой вкладки, вот функция:
function preformat(code){
chars = split(code, ''); //splits code into individual characters
for(let i = 0; i < chars.length; i ){ //loops through all characters
let char = chars[i]; // current character
let nextChar = chars[i 1]; // next character
if(char === ' ' amp;amp; nextChar == ' '){
chars.splice(i, 1);
i--;
} else if(char !== ' ' amp;amp; nextChar === " " || "-" || "*" || '/' || "**"){
chars.splice(i, 0, ' ');
} else if(char === " " || "-" || "*" || '/' || "**" amp;amp; nextChar !== " "){
chars.splice(i, 0, ' ');
}
// add whitespace beside operators
}
let val = '';
for(let i = 0; i < chars.length; i ){
val = chars[i];
}
// turn back into a string
return val;
}
запуск этой preformat()
функции приводит к сбою программы, я сделал практически все, что мог придумать.
PS Я использую p5.js веб — редактор
Ответ №1:
Проблема в том, что вы сталкиваетесь с бесконечным циклом 14 и 16, поскольку эти else ifs всегда оцениваются как true и продолжают вставлять новые элементы в массив. Из-за этого в конечном итоге на странице заканчивается память и происходит сбой. Приведенное ниже должно работать нормально:
function preformat(code){
chars = code.split(''); //splits code into individual characters
for(let i = 0; i < chars.length; i ){ //loops through all characters
let char = chars[i]; // current character
let nextChar = chars[i 1]; // next character
if(char === ' ' amp;amp; nextChar == ' '){
chars.splice(i, 1);
i--;
} else if(char !== ' ' amp;amp; (nextChar === ' ' || nextChar === '-' || nextChar === '*' || nextChar === '/')){
chars.splice(i, 0, ' ');
} else if((char === ' ' || char === '-' || char === '*' || char ==='/') amp;amp; nextChar !== ' '){
chars.splice(i, 0, ' ');
}
// add whitespace beside operators
}
let val = '';
for(let i = 0; i < chars.length; i ){
val = chars[i];
}
// turn back into a string
return val;
}
console.log(preformat("text text"));
Я также обновил проверки if, поскольку некоторые значения оцениваются как false независимо от того, что (сравнение строки длиной один со строкой длиной два).