2017-02-04 3 views
1

誰かが自分のコードに何が間違っているか教えてもらえますか?正しい世紀を返します。これは正しい世紀を返すことを意図しています(たとえば、1905年は20を返し、1700年は17を返します)。制約は1≤年≤2005です。入力は正の整数(年)です。誰かが自分のコードに何が間違っているか教えてもらえますか?正しい世紀を返す

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; 



} 

} 
+1

それを 'switch(true)'に変更します。そうでなければ 'if..else if'チェーンを使う必要があります。 – 4castle

+4

あなたは 'switch'がどのように動作するのか誤解しています。とにかく、関数本体全体を 'return Math.ceil(year/100);'に減らすことができます。 – Xufox

+0

ありがとう、それは動作します。しかし、 'switch(year)'の問題は何ですか? – monsterreh2b

答えて

1

範囲を確認したい場合はcaseを使用できません。正確な値が必要です。

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

だけ100year - 1を分割し、このような1を追加します:

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

 

 
/* Example: */ 
 

 
var year = parseInt(prompt('Enter a year: ')); 
 

 
alert('The century is: ' + centuryFromYear(year));
あなたの問題のために、より一般的な解決策は、これに似たものになるだろう

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;] 
} 

+0

1900年には19を返し、2000年には20を返します。 –

+0

@MarinaDunst 2000年であれば21に警告しましたが、その後OPコードを見て、実際に彼が望んでいるように見えます。 OPコードをチェック!私はそれを私が持っていたやり方に戻すだけだと思う​​。私の最初の答えが正しいと私は確信していました。それを元に戻す。 –

+0

入手しました。私はOPが間違っていると思う。 –

関連する問題