первая часть массива не сохраняет результаты учеников, а в окне оповещения указывается имя ученика и неопределенный или NaN - PullRequest
0 голосов
/ 13 января 2020

Вот код:

	function studentName(x)
	{
		while(x == '')
		{
			x = prompt('Cannot leave field blank. Enter again');
			
		}
		return(x)
	} 

	
	function studentScore(y)
	{
		while(y == '' || y > 100 || y < 0 || isNaN(y))
		{
			y = parseFloat(prompt('Invalid score. Enter score again'));
		}
		return(y)
	}

	
	function another(z,t)
	{
		while(z == '' && z != 'n' && z != 'N' && z != 'y' && z != 'Y')
		{
			
			if(z == 'y' || z == 'Y')
			{
				z = prompt('Invalid Option. Enter another score? Y or N')
			}
			else
			{
				t = prompt('Invalid Option. Enter another student? Y or N')
			}
		}
		return(z)
	}
			
	var names = []	
	var scores = []
	var redo = true
	var anotherName
	var redo2
	var retry = true
	var anotherScore
	var retry2
	var i = 0
	var a = 1
		while(redo == true)
		{
			var studentNames = prompt('Enter student name');
					var name = studentName(studentNames);
					names.push(name)
			while(retry == true)
			{
				var studentScores = parseFloat(prompt('Enter student score'));
				var score = score + studentScore(studentScores);

				retry = prompt('Enter another score? Y/N');
				retry2 = another(retry);
				if(retry == 'y' || retry == 'Y')
				{
					retry = true
					a++
				}
				else if(retry == 'n' || retry == 'N')
				{
					retry = false
				}
			}
			score = score / a
			scores[i] = score
			redo = prompt('Enter another student? Y/N');
			redo2 = another(redo);

			if(redo == 'y' || redo == 'Y')
			{
				redo = true
				retry = true
				i++;
				a = 1
				score = 0
			}
			else if(redo == 'n' || redo == 'N')
			{
				redo = false
			} 
		}
		
		for(y=0; y < names.length; y++)
		{
			alert(names[y] + " - " + scores[y]);
		}

Попробуйте запустить код, чтобы понять, что это проблема, которую трудно описать, но в основном, я думаю, что массив не правильно хранит первый результат, потому что он продолжает произносить имя ученика в качестве имени, а оценка либо NaN, либо undefined

Ответы [ 2 ]

0 голосов
/ 13 января 2020

Когда ваш l oop запускает эту строку в первый раз:

var score = score + studentScore(studentScores);

Переменная score еще не определена, поэтому приведенная выше строка приводит к NaN.

Чтобы исправить, просто определите score перед вашим l oop:

var score = 0;
0 голосов
/ 13 января 2020

Пожалуйста, инициализируйте счет за пределами l oop и удалите ключевое слово var из l oop.

<script>
function studentName(x)
{
    while(x == '')
    {
        x = prompt('Cannot leave field blank. Enter again');

    }
    return(x)
} 


function studentScore(y)
{
    while(y == '' || y > 100 || y < 0 || isNaN(y))
    {
        y = parseFloat(prompt('Invalid score. Enter score again'));
    }
    return(y)
}


function another(z,t)
{
    while(z == '' && z != 'n' && z != 'N' && z != 'y' && z != 'Y')
    {

        if(z == 'y' || z == 'Y')
        {
            z = prompt('Invalid Option. Enter another score? Y or N')
        }
        else
        {
            t = prompt('Invalid Option. Enter another student? Y or N')
        }
    }
    return(z)
}

var names = []  
var scores = []
var redo = true
var anotherName
var redo2
var retry = true
var anotherScore
var retry2
var i = 0
var a = 1
    while(redo == true)
    {
        var studentNames = prompt('Enter student name');
                var name = studentName(studentNames);
                names.push(name)
                var score = 0;
        while(retry == true)
        {
            var studentScores = parseFloat(prompt('Enter student score'));
            score = score + studentScore(studentScores);

            retry = prompt('Enter another score? Y/N');
            retry2 = another(retry);
            if(retry == 'y' || retry == 'Y')
            {
                retry = true
                a++
            }
            else if(retry == 'n' || retry == 'N')
            {
                retry = false
            }
        }
        score = score / a
        scores[i] = score
        redo = prompt('Enter another student? Y/N');
        redo2 = another(redo);

        if(redo == 'y' || redo == 'Y')
        {
            redo = true
            retry = true
            i++;
            a = 1
            score = 0
        }
        else if(redo == 'n' || redo == 'N')
        {
            redo = false
        } 
    }

    for(y=0; y < names.length; y++)
    {
        alert(names[y] + " - " + scores[y]);
    }
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...