Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 试图使循环退出,但它目前只是继续循环100次_Javascript_Loops - Fatal编程技术网

Javascript 试图使循环退出,但它目前只是继续循环100次

Javascript 试图使循环退出,但它目前只是继续循环100次,javascript,loops,Javascript,Loops,当生命骰子掷到0时,角色100次点击的循环退出循环时,我尝试这样做。它目前的状态是100次循环。我不太确定我需要如何着手解决这个问题,任何提示都会有所帮助。我的代码如下 function addChar(fname, lname, speed, agility, wep, outfit, mood) { this.fname = fname; this.lname = lname; this.speed = speed; this.agility = agilit

当生命骰子掷到0时,角色100次点击的循环退出循环时,我尝试这样做。它目前的状态是100次循环。我不太确定我需要如何着手解决这个问题,任何提示都会有所帮助。我的代码如下

function addChar(fname, lname, speed, agility, wep, outfit, mood) {
    this.fname = fname;
    this.lname = lname;
    this.speed = speed;
    this.agility = agility;
    this.wep = wep;
    this.outfit = outfit;
    this.mood = mood;

    this.special = function(specialMove) {
        specialMove();

    }

    this.jumpKick = function() {
        var jmpkckTimes = Math.floor(Math.random() * (100 - 33 + 1)) + 33;

        document.write("He jumpkicks " + jmpkckTimes + " times. ");
        if (jmpkckTimes > 70) {
            document.write("He enters rage mode! ");
        } else {
            document.write("He does not have enough kicks for rage mode. ");
        }
    }

    this.hits = function() {
        var allHits = Math.floor(Math.random() * (100 - 33 + 1)) + 33;
        document.write(" He gets attacked for " + allHits + " HP.");
    }
    this.lifes = function() {
        var life = Math.floor(Math.random() * (3 - 0 + 1)) + 0;
        if (life > 0) {
            document.write(" The life dice rolls a " + life + ". You have survived! For now...");


        } else {
            document.write(" The life dice rolls a " + life + ". You have died!");

        }
    }
}
var myChar = new addChar('Johhny', 'Kicker', 10, 7, 'Ancient Greataxe', 'Barrows', 'angry');

document.write(myChar.fname + " " + myChar.lname + "'s speed is " + myChar.speed + "<br>");
document.write(myChar.fname + " " + myChar.lname + "'s agility is " + myChar.agility + "<br>");
document.write(myChar.fname + " " + myChar.lname + "'s weapon of choice is: " + myChar.wep + "<br>");
document.write(myChar.fname + " " + myChar.lname + " feels " + myChar.mood + "<br>");
document.write(myChar.fname + " " + myChar.lname + " attempts his special: ");
myChar.special(myChar.jumpKick)

for (i = 1; i < 101; i++) {
    myChar.hits(myChar.allHits)
    myChar.lifes(myChar.lifes)
}

function myOutfit() {
    document.getElementById("demo").innerHTML = ("He is wearing " + myChar.outfit)

}
var start = Date.now();
var response = prompt("Do you think my character has what it takes?", "");
var end = Date.now();
var elapsed = (end - start) / 1000;
console.log("You took " + elapsed + " seconds" + " to type: " + response);
function addChar(fname、lname、速度、敏捷性、wep、装备、情绪){
this.fname=fname;
this.lname=lname;
速度=速度;
敏捷=敏捷;
this.wep=wep;
这套衣服;
这个。心情=心情;
this.special=函数(specialMove){
特殊运动();
}
this.jumpKick=函数(){
var jmpkckTimes=Math.floor(Math.random()*(100-33+1))+33;
写下(“他跳跳”+jmpkckTimes+“times”);
如果(jmpkckTimes>70){
写下(“他进入愤怒模式!”);
}否则{
写下(“他没有足够的踢腿来适应愤怒模式。”);
}
}
this.hits=函数(){
var allHits=Math.floor(Math.random()*(100-33+1))+33;
写下(“他因为“+allHits+”HP”而受到攻击);
}
this.lifes=函数(){
var-life=Math.floor(Math.random()*(3-0+1))+0;
如果(寿命>0){
记录。写下(“生命骰子掷一个“+生命+”。你活下来了!现在……”);
}否则{
记录。写下(“生命骰子掷一个“+生命+”。你已经死了!”);
}
}
}
var myChar=new addChar('johny','Kicker','10,7','against Greataxe','Barrows','angle');
document.write(myChar.fname+“”+myChar.lname+“”)的速度为“+myChar.speed+”
”; write(myChar.fname+“”+myChar.lname+“”)的敏捷性是“+myChar.agility+”
”; write(myChar.fname+“+myChar.lname+”)选择的武器是:“+myChar.wep+”
”; document.write(myChar.fname+“”+myChar.lname+”感觉“+myChar.mood+”
”; write(myChar.fname+“”+myChar.lname+”尝试他的特殊:“); myChar.special(myChar.jumpKick) 对于(i=1;i<101;i++){ myChar.hits(myChar.allHits) myChar.lifes(myChar.lifes) } 函数myOutfit(){ document.getElementById(“demo”).innerHTML=(“他穿着”+myChar.fault) } var start=Date.now(); var response=prompt(“您认为我的角色具备所需功能吗?”,“”); var end=Date.now(); var经过=(结束-开始)/1000; log(“键入“+响应”需要“+运行时间+”秒“+”);
通常,您可以中断foor循环,并阻止进一步执行foor循环,然后继续下一次迭代:

for (var i = 0; i < 10; i++) {
    if (i == 4) continue;
    if (i == 8) break;
    console.log(i);
}
for(变量i=0;i<10;i++){
如果(i==4)继续;
如果(i==8)中断;
控制台日志(i);
}
这将基本上打印:0、1、2、3、5、6、7
(正如您所看到的,有点跳过了4)
(它也将在while/do-while循环中工作)

因此,在您的例子中,您可以检查其中一个函数的返回值是否为true或false,或者执行其他类型的条件检查以打破循环

或者类似于Rob Brander在回答中所写的:

var maxTurns = 100;

var turns = 0;
while (myChar.isAlive && ++turns <= maxTurns) {
    myChar.hits();
    myChar.lifes();
}
console.log("character is: " + myChar.isAlive ? "alive" : "dead");
console.log("after: " + turns + " turns.");
var maxTurns=100;
var=0;

虽然(myChar.isAlive&&++)通常可以很好地转换,但您可以打破foor循环,并阻止进一步执行foor循环,并继续下一次迭代:

for (var i = 0; i < 10; i++) {
    if (i == 4) continue;
    if (i == 8) break;
    console.log(i);
}
for(变量i=0;i<10;i++){
如果(i==4)继续;
如果(i==8)中断;
控制台日志(i);
}
这将基本上打印:0、1、2、3、5、6、7
(正如您所看到的,有点跳过了4)
(它也将在while/do-while循环中工作)

因此,在您的例子中,您可以检查其中一个函数的返回值是否为true或false,或者执行其他类型的条件检查以打破循环

或者类似于Rob Brander在回答中所写的:

var maxTurns = 100;

var turns = 0;
while (myChar.isAlive && ++turns <= maxTurns) {
    myChar.hits();
    myChar.lifes();
}
console.log("character is: " + myChar.isAlive ? "alive" : "dead");
console.log("after: " + turns + " turns.");
var maxTurns=100;
var=0;

当(myChar.isAlive&&++)转换为时,您需要有一种方法在对象外部进行通信,了解对象内部发生的事情

例如,当函数中发生某些事情时,如lifes()或hits(),您应该为对象上的变量赋值以保留状态。这样,您就可以从For循环访问状态

例如:

this.isAlive = true; // starting condition

this.lifes = function() {
    var life = Math.floor(Math.random() * (3 - 0 + 1)) + 0;
    this.isAlive = (life > 0);
    if (this.alive) {
        document.write('you survived');
    } else {
        document.write('you died');
    }
现在,在for循环中,您可以访问isAlive:

// loop until 100 attempts or you die, which ever comes first
for (i = 1; i < 101 && myChar.isAlive; i++) {
    myChar.hits(myChar.allHits)
    myChar.lifes(myChar.lifes)
}
//循环100次,否则你会死,哪一次先到
对于(i=1;i<101&&myChar.isAlive;i++){
myChar.hits(myChar.allHits)
myChar.lifes(myChar.lifes)
}

您需要有一种方法在对象外部进行通信,了解对象内部发生的事情

例如,当函数中发生某些事情时,如lifes()或hits(),您应该为对象上的变量赋值以保留状态。这样,您就可以从For循环访问状态

例如:

this.isAlive = true; // starting condition

this.lifes = function() {
    var life = Math.floor(Math.random() * (3 - 0 + 1)) + 0;
    this.isAlive = (life > 0);
    if (this.alive) {
        document.write('you survived');
    } else {
        document.write('you died');
    }
现在,在for循环中,您可以访问isAlive:

// loop until 100 attempts or you die, which ever comes first
for (i = 1; i < 101 && myChar.isAlive; i++) {
    myChar.hits(myChar.allHits)
    myChar.lifes(myChar.lifes)
}
//循环100次,否则你会死,哪一次先到
对于(i=1;i<101&&myChar.isAlive;i++){
myChar.hits(myChar.allHits)
myChar.lifes(myChar.lifes)
}

我刚刚尝试了您的更正,但他们似乎没有纠正解决方案。因此我需要进一步编辑?@DrewStenger这是一个示例,不是一个实现。您的问题是根据对象的当前状态提前退出循环。这取决于您如何实现该逻辑。@DrewStenger我们不是奴才。此外,So rules明确地说明了这一点。我只是尝试了你的更正,但他们似乎没有纠正解决方案。所以我需要进一步编辑?@DrewStenger这是一个示例,不是一个实现。你的问题是基于对象的当前状态提前退出循环。这取决于你如何实现该逻辑。@DrewStenger我们不是minio此外,SO规则明确指出。我已经相应地编辑了代码,但是得到了相同的输出。我已经相应地编辑了代码,但是得到了相同的输出