条目Javascript - 遇到两个抨击头脑的问题

时间:2017-09-12 18:47:04

标签: javascript

所以我在大学读了一个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 //无论我如何尝试将yearstudying加在一起

,它似乎会连接起来

第二个难点:

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 个答案:

答案 0 :(得分:2)

year + +studying

(在数字中添加数字,而不是在字符串中添加数字)

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

等于:

if( x === x < 50 )

等于:

if( 40 === true )

这显然是假的。只是做

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

让它发挥作用

答案 1 :(得分:2)

对于第一个,可以通过简单的parseInt(year)+ parseInt(学习)来解决。老实说,可能只是一个parseInt(学习)因为我相信提示会返回一个字符串。

对于第二个,答案就在于此 here

你不能像你想的那样在switch case语句中做条件。

编辑:

由于您是初学者,我建议您查看提示here

上的文档

以及关于切换器状态here的文档。

答案 2 :(得分:2)

第一个难点:

学习上调用 parseInt 函数,将它们转换为整数,然后再添加它们:

&#13;
&#13;
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)));
&#13;
&#13;
&#13;

第二个难点:

在这个问题上有几个错误。我将弃用每个的详细示例,因为它会多次分解您的代码,但这是一个快速的概述:

  • 开关关键字用于检查变量的具体值。也就是说,case(...)子句中的表达式必须是一个值,而在你的情况下,这些是 if 语句。

  • 您的条件重叠!请注意,如果等级大于60,则必须大于50.如果大于80,则肯定大于70,60,50等等......这意味着任何等级为50或更高等级将落入条件(x> = 50)并且从未击中其他人 - 不太可能是你想要实现的目标。

  • 请注意,您尝试打印 grader 函数的返回值,但它实际上从未返回值...

我建议您在发布问题之前花些时间研究更多关于语言相关语言的语法和结构 - 自己搜索和发现答案是所有学习发生的地方:)

祝你好运!

答案 3 :(得分:1)

你遇到的另一个逻辑问题是,即使你的switch语句有效,它也会返回F或D(因为x是&lt; 50或&gt; = 50,不会检查其他条件)。

我建议您使用if / elseif结构(因为switch(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';
  }
}