使用for循环收集电影评级

时间:2016-01-02 12:31:02

标签: javascript nested-loops

我正在尝试为uni编写一个程序,提示您输入电影俱乐部观看的电影然后从输入的电影中请求您输入评级,评级提示循环直到观看它的人数已经输入他们的结果然后你键入9999结束该电影的评级然后我需要它再次循环输入下一部电影的评级....我只是无法想出这一个任何帮助将不胜感激。目前它做了我想做的事情直到输入第一部电影的评级结束然后当你按9999它结束了一切但我需要它循环输入下一部电影的评级......? - 克尔斯滕

SENTINEL = 9999;

var movieList = prompt('Enter your CSV list of Movies: ','Aliens,Blade Runner,Gladiator');
movieTitles = movie_titles_collector(movieList); //output to function m

var movieRatings = [];
var i = 0;
var j = 1;
var k = 1;
var sumRating = 0;
var averageRatings = 0;
var integersRemaining = movieTitles.length
var movieToRate;

for(var movieIndex=0;movieIndex<movieTitles.length;movieTitles++){
    while(movieRatings != SENTINEL)
    {
        movieRatings = parseInt(prompt([j++]+' rating for:'+movieTitles[movieIndex]+' (9999 to end)','1-10'));
        sumRating+= movieRatings;
    }

}

function movie_titles_collector(m)
{
    //@ param m = string of movie names
    //The purpose of this function is to collect the movie titles and return an array of 
    //movie titles stored in movieTitlesList.

    var movieTitlesList = [];   //array to store the broken up string, movieList
    movieTitlesList = m.split(','); 

    return movieTitlesList;
}

2 个答案:

答案 0 :(得分:1)

到目前为止我发现了两个错误:

  1. var movieRatings = [];应为var movieRatings;

  2. for(var movieIndex=0;movieIndex<movieTitles.length;movieTitles++){...

    增加movieIndex代替movieTitles

答案 1 :(得分:1)

  1. 真正的问题是for循环中有一个while循环 什么时候你真的要将这两个循环合并为一个循环。

  2. 虽然将movieRatings初始化为数组是错误的,但在这种特殊情况下,它不会影响任何事情。像ViRuSTriNiTy一样将它设置为未定义的var movieRatings;说没问题。

  3. 由于ViRuSTriNiTy指出你也没有增加你的movieIndex值。

  4. 除了你不应该做的事情之外,最后一件似乎不会影响任何事情的小事情是你不应该写[j++]而只是写j++ }。 [j++]将您的号码放在数组中,这在这种情况下是不必要的。

  5. 以下是将for和while循环合并在一起以使用while

    var movieIndex=0;
    while(movieRatings != SENTINEL && movieIndex<movieTitles.length)
    {
        movieRatings = parseInt(prompt(j++ +' rating for:'+movieTitles[movieIndex]+' (9999 to end)','1-10'));
        sumRating+= movieRatings;
        movieIndex++;
    }
    

    上述内容也可以改写为使用for

    for(var movieIndex=0; movieRatings != SENTINEL && movieIndex<movieTitles.length; movieIndex++)
    {
        movieRatings = parseInt(prompt(j++ +' rating for:'+movieTitles[movieIndex]+' (9999 to end)','1-10'));
        sumRating+= movieRatings;   
    }
    

    所以...正如你所看到的,你可以在循环上有多个条件,movieRatings != SENTINEL && movieIndex<movieTitles.length(2个条件),只要这组条件保持为真,那么你的循环将继续执行。另外,请注意for和while循环之间movieIndexmovieIndex++的不同位置。 for循环基本上是while版本的稍微发行版。