2016-05-01 4 views
1

Я пытаюсь написать код для поиска високосного года. Однако, кажется, что-то не так с вложенными if и else форматом. Пожалуйста, предложите.Вложен, если заявление не работает

[int]$x = Read-Host -Prompt 'Input a year : '; 

if ($x % 4 -eq 0) { 
    Write-Host $x 'is a leap year'; 
    if ($x % 100 -eq 0) { 
     Write-Host $x 'is a leap year'; 
     if ($x % 400 -eq 0) { 
      Write-Host $x 'is a leap year'; 

     else { 
      Write-Host $x 'is not a leap year'; 
     } 
    } 
    else { 
     Write-Host $x 'is not a leap year'; 
    } 
} 
else { 
    Write-Host $x 'is not a leap year'; 
} 
+1

«Тем не менее, кажется, что-то не так» - *, что * кажется быть неправильным (кроме отсутствующего закрытия '}' перед первым 'else')? Каковы ваши ожидания? –

+1

Я немного очистил код, так что легче понять, что пошло не так. Pri 1: считываемый код. Pri 2: Читаемый код ..... :-) –

+0

Большое вам спасибо за исправление. Просто понял, что в коде есть отсутствующие круглые скобки, но консоль не жалуется на это - скорее это бросало год с результатами, такими как $ x - високосный год, а также $ x не високосный год. Я мог бы использовать функцию IsLeapYear и думал, что еще будет в этой функции, кроме этого кода ... Я успешно использовал это в VB Script, поэтому подумал, что я тоже напишу в PowerShell. Ну, я относительно новичок в Powershell. – 9009

ответ

3

Я думаю, что это то, что вы хотите:

[int]$x = Read-Host -Prompt 'Input a year : '; 

If ($x % 4 -eq 0) { 
    if ($x % 400 -eq 0){ 
     Write-Host $x 'is a leap year'; 
    } 
    Elseif ($x % 100 -eq 0){ 
     Write-Host $x 'is not a leap year'; 
    } 
    Else{ 
     Write-Host $x 'is a leap year'; 
    } 
} 
Else { 
    Write-Host $x 'is not a leap year'; 
} 
3

Как уже упоминалось Mathias, Вы не нашли закрывающую фигурную скобку. Тем не менее, вы можете упростить код много и гнездо ваши, если заявления, как это:

[int]$x = Read-Host -Prompt 'Input a year : '; 

if($x % 4 -eq 0 -and ($x % 400 -eq 0 -or $x % 100 -ne 0)) 
{ 
    Write-Host "$x is a leap year" 
} 
else 
{ 
    Write-Host "$x is not a leap year" 
} 

Или просто использовать:

[System.DateTime]::IsLeapYear($x) 
+2

Вековые годы не являются високорукими годами, если они не могут быть равномерно разделены на 400. (Например, 1700, 1800 и 1900 не были високосными годами, но 1600 и 2000 годами, которые делятся на 400, были.) –

+1

@jisaak правильно, если ($ x% 4 -eq 0-and ($ x% 400 -eq 0 -или $ x% 100 -ne 0)) {"високосный год"} ' –

+0

Спасибо Матиасу, я просто хотел показать ему, как он может гнездиться, если заявления с '-or' /' -and'. @AniMenon Я исправил свой ответ ... –