我在我的javascript课程中有一个作业,它提出了一个问题,我觉得我已经接近能够回答,但还没到达那里。
令我困惑的一件事是,为什么开发人员工具会告诉我变量" message"一片空白。我无法弄明白。在这个问题出现之前的所有事情(都是类似的问题),我已经能够轻而易举地完成任务。我可能在想它。
问题: "创建一个应用程序,生成一组五个随机的"外星人名称"单击按钮时。这些外星人的名字必须至少有一个元音,名字中应该有两个重复的字符。示例名称包括:' llag',' Uffrd'和' Dxxi'。
这些名称应该在DOM上显示给用户,并在后续按钮点击时替换为新名称。"
我的代码(一直在摆弄它并且在粘贴之前没有检查过,所以请原谅我,如果它很难导航。让我知道如何你会用javascript来解决这个问题。
//declares and assaigns the message (text where names will be printed)
var message = document.querySelector("#message");
//declares the array and gives it 5 spots for names
var nameArray = ["", "", "", "", ""];
// declares the name generating function
function rando() {
//declares assigns name as empty for now
var name = [];
//randomizes length of the name
var namelength = Math.round(Math.random() * 7) + 4;
//declaring a vowel count
var vowelCount = 0;
//for loop to store each name into the array
for (var i = 0; i < 5; i++) {
//for loop to decide the letters for each
for (var i = 0; i < namelength; i++) {
//declares boolean variable that stores whether or not the current character is a vowel using the created is Vowel() function
var wasVowel = isVowel(name[i]);
//if the last character was a vowel
if (wasVowel) {
//counts vowels
vowelCount++;
//while loop
while (isVowel(name[i])) {
//declares the variable and assigns it to a random number between 0 and 25
var randomCharacterIndex = Math.round(Math.random() * 25);
//updates the current character based on the random variable equal to or above the unicode 97 ("a")
name[i] = String.fromCharCode(97 + randomCharacterIndex);
}
//if the previous character was not a vowel
} else {
//while loop
while (isVowel(name[i]) == false) {
//declares variable and assigns it to random number between 0 and 25
var randomCharacterIndex = Math.round(Math.random() * 25);
//updates the current character based on the random variable equal to or above the unicode 97 ("a")
name[i] = String.fromCharCode(97 + randomCharacterIndex);
}
}
//adds each letter to the name
name += name[i];
}
//making the first letterz
name[0].toUpperCase();
//adds each name to the array
nameArray[i] = name.join("");
//name is reset to null for the next name loop
name = [];
}
//prints the names onto the DOM
message.innerHTML = nameArray.join(", ");
}
function isVowel(character) {
if (character == "a" || character == "e" || character == "i" || character == "o" || character == "u") {
return true;
} else {
//this is the 'default'
return false;
}
}
&#13;
<button onclick="rando()">Random Names</button>
<div id="message"></div>
&#13;
答案 0 :(得分:0)
我使用以下方法
生成随机名称长度
生成随机双字符位置
构建单词,遵循设置规则并相应地生成随机字符
var message = document.querySelector("#message");
function rando() {
message.innerHTML = "";
for (var j=0;j<5;j++)
{
var name = "";
var namelength = Math.round(Math.random() * 7) + 4;
var pairPosition = Math.round(Math.random() * (namelength-1));
var obligatoryVowelPos = Math.round(Math.random() * (namelength-1));
while(obligatoryVowelPos == pairPosition || obligatoryVowelPos == (pairPosition+1))
obligatoryVowelPos = Math.round(Math.random() * (namelength-1));
for (var i =0;i<namelength;i++) {
if (i==pairPosition)
{
var character = generateRandomLetter();
name = name + character + character;
i++;
}
else if (i==obligatoryVowelPos)
{
name = name + generateVowel();
}
else
{
name = name+generateRandomLetter();
}
name = name.charAt(0).toUpperCase() + name.slice(1);
//prints the names onto the DOM
}
message.innerHTML += name + "<br>";
}
}
function generateVowel()
{
var aeiou = Math.round(Math.random()*4)+1;
switch (aeiou)
{
case 1:return 'a';break;
case 2:return 'e';break;
case 3:return 'i';break;
case 4:return 'o';break;
case 5:return 'u';break;
}
}
function generateRandomLetter()
{
var randomCharacterIndex = Math.round(Math.random() * 25);
return String.fromCharCode(97 + randomCharacterIndex);
}
虽然不是必需的,但您也可以使用原始的isVowel函数来防止代码进入时出现双元音,或者如果在单词创建循环结束后没有添加元音,则可以使用元音添加元音。这完全取决于您,此代码已经解决了您的问题。