简体   繁体   中英

Can someone tell me what's wrong with my code? Return correct century

Can someone tell me what's wrong with my code? Return correct century. This is intended to return the correct century, (eg year 1905 returns 20, year 1700 returns 17). Constraint is 1 ≤ year ≤ 2005. Input is a positive integer (year).

    function centuryFromYear(year) {
    switch (year) {

    case ((year >= 1) && (year < 101)):
    return 1;
    break;

    case ((year > 100) && (year < 201)):
    return 2; 
    break;

    case ((year > 200) && (year < 301)):
    return 3;
    break;

    case ((year > 300) && (year < 401)):
    return 4;
    break;

    case ((year > 400) && (year < 501)):
    return 5;
    break;

    case ((year > 500) && (year < 601)):
    return 6;
    break;

    case ((year > 600) && (year < 701)):
    return 7;
    break;

    case ((year > 700) && (year < 801)):
    return 8;
    break;

    case ((year > 800) && (year < 901)):
    return 9;
    break;

    case ((year > 900) && (year < 1001)):
    return 10;
    break;

    case ((year > 1000) && (year < 1101)):
    return 11;
    break;

    case ((year > 1100) && (year < 1201)):
    return 12;
    break;

    case ((year > 1200) && (year < 1301)):
    return 13;
    break;

    case ((year > 1300) && (year < 1401)):
    return 14;
    break;

    case ((year > 1400) && (year < 1501)):
    return 15;
    break;

    case ((year > 1500) && (year < 1601)):
    return 16;
    break;

    case ((year > 1600) && (year < 1701)):
    return 17;
    break;

    case ((year > 1700) && (year < 1801)):
    return 18;
    break;

    case ((year > 1800) && (year < 1901)):
    return 19;
    break;

    case ((year > 1900) && (year < 2001)):
    return 20;
    break;

    case ((year > 2000) && (year <=2005)):
    return 21;
    break;



}

}

You can't use case if you want to check range, it needs exact values.

switch (expression) {
  case value1:
    //Statements executed when the result of expression matches value1
    [break;]
  case value2:
    //Statements executed when the result of expression matches value2
    [break;]
  ...
  case valueN:
    //Statements executed when the result of expression matches valueN
    [break;]
  default:
    //Statements executed when none of the values match the value of the expression
    [break;]
}

A more general solution for your problem would be something similar to this:

function centuryFromYear(year) {
    return Math.floor((year-1)/100)+1
}

Just divide the year - 1 by a 100 and add 1 like this:

 function centuryFromYear(year) { return Math.floor((year - 1) / 100) + 1; } /* Example: */ var year = parseInt(prompt('Enter a year: ')); alert('The century is: ' + centuryFromYear(year)); 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM