Вступление Javascript - сталкиваясь с двумя головокружительными проблемами

1

Поэтому я беру курс Javascript в своем колледже, и у меня возникли две проблемы: решения, к которым я искал всюду в Интернете. Я буду держать его в курсе, потому что я собираюсь сломать свою клавиатуру, просто подумав об этом.

Первая трудность:

var year = 2017;
var age = prompt("Please enter your age: ");
console.log("I was born in the year of " + (year - age));
var studying = prompt("Enter the number of years you expect to study in the college: ");
console.log("You will graduate from Seneca College in the year " + (year + studying));

Ожидаемый результат:

1995

2019

Фактический выход:

1995

20172//Кажется, что конкатенация, независимо от того, как я пытаюсь добавить year и вместе studying

Вторая сложность:

function grader(x) {
    switch (x) {
        case (x < 50) :
            console.log('Grade: F');
                break;
        case (x >= 50) :
            console.log('Grade: D');
                break;
        case (x >= 60) :
            console.log('Grade: C');
                break;
        case (x >= 70) :
            console.log('Grade: B');
                break;
        case (x >= 80) :
            console.log('Grade: A');
                break;
        default :
            console.log('Error, invalid grade');
    }
}
console.log("The letter grade is: " + grader (40));

Ожидаемый результат:

Класс письма: Оценка F

Фактический выход:

Ошибка, недопустимая оценка

Буквы, градуированные: undefined

Любая помощь будет оценена по достоинству. Я понятия не имею, почему я сталкиваюсь с этими ошибками.

Теги:

4 ответа

2
Лучший ответ
year + +studying

(Добавьте число в число, а не число в строку)


switch (x) {
    case (x < 50) :

равно:

if( x === x < 50 )

который равен:

if( 40 === true )

что, очевидно, неверно. Просто делать

switch (true) {
    case (x < 50) :

Чтобы заставить его работать

  • 0
    Спасибо! Святое дерьмо! Еще одна вещь, хотя. Когда я запускаю код, он говорит Grade: F а затем на следующей строке он говорит undefined . есть идеи?
  • 0
    @michael, потому что ваша консоль записывает результат вызова, который не определен, так как грейдер ничего не возвращает.
2

Первая трудность:

Вызовите функцию parseInt в течение года и изучите, чтобы преобразовать их в целые числа, прежде чем добавлять их:

var year = 2017;
var age = prompt("Please enter your age: ");
console.log("I was born in the year of " + (year - age));
var studying = prompt("Enter the number of years you expect to study in the college: ");
console.log("You will graduate from Seneca College in the year " + (parseInt(year) + parseInt(studying)));

Вторая сложность:

В этой проблеме есть несколько ошибок. Я воздержусь от подробных примеров от каждого, так как он несколько раз разбивал ваш код, но вот краткое изложение:

  • Ключевое слово switch используется для проверки конкретных значений переменной. То есть выражение внутри аргумента case (...) должно быть значением, тогда как в вашем случае это утверждения if.

  • Ваши условия перекрываются! Обратите внимание, что если степень больше 60, она также обязательно превышает 50. Если она больше 80, она, безусловно, больше 70, 60, 50 и т.д. Это означает, что любой сорт 50 или более попадет в состояние (x> = 50) и никогда не ударит других - маловероятно, чего вы пытались достичь.

  • Обратите внимание, что вы пытаетесь напечатать возвращаемое значение функции грейдера, но оно никогда не возвращает значение...

Я предлагаю вам не торопиться и больше исследовать синтаксис и конструкции языка, относящегося к вашей проблеме, прежде чем отправлять вопрос - поиск и обнаружение ответов - это то, где все обучение происходит :)

Удачи!

2

Для первого, который может быть разрешен с помощью простого parseInt (year) + parseInt (изучение). Честно говоря, возможно, просто parseInt (изучение), поскольку я считаю, что приглашение возвращает строку.

Для второго ответ на этот вопрос лежит здесь.

Вы не можете делать условные выражения в операторах case case, как вы думаете.

Редактировать:

Поскольку вы новичок, я рекомендую посмотреть документацию по приглашению здесь.

и документацию о статусах коммутатора здесь.

1

Еще одна логическая проблема заключается в том, что даже если ваш оператор switch работал, он будет возвращать либо F, либо D (поскольку x является либо <50 или> = 50, никакие другие условия не будут проверяться).

Я предлагаю вам использовать структуру if/elseif (поскольку переключатель (true) не очень полезен) и реструктурируйте свою логику, чтобы выбрать подходящую букву класса:

function grader(x) {
  if (x >= 80) {
    return 'A';
  } else if (x >= 70) {
    return 'B';
  } else if (x >= 60) {
    return 'C';
  } else if (x >= 50) {
    return 'D';
  } else {
    return 'F';
  }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню