2012-11-22 73 views
0
int monthentered = 0; 
int dayentered = 0; 
int year = 0000; 
int [] month = new int [12]; 
int [] day = new int [31]; 
bool leap = false; 

for (int x = 0; x <= 11; x++) 
{ 
    month[x] = x+1; 
} 

for (int x = 0; x <= 30; x++) 
{ 
    day[x] = x+1; 
} 
Console.WriteLine("Please enter a year..."); 
year = (Convert.ToInt16(Console.ReadLine())); 
Console.WriteLine("{0}", year); 

Console.WriteLine("Please enter a month..."); 
monthentered = (Convert.ToInt16(Console.ReadLine())); 

Console.WriteLine("Please enter a day..."); 
dayentered = (Convert.ToInt16(Console.ReadLine())); 

while (monthentered == 01 || 03 || 05 || 07 || 08 || 10 || 12) 
{ 
    while (dayentered == 31) 
    { 
     Console.WriteLine("There are only 30 days in this month please re-enter your day..."); 
     dayentered = (Convert.ToInt16(Console.ReadLine())); 
    } 
} 

while (monthentered == 02) 
{ 
    while (dayentered > 28) 
    { 
     Console.WriteLine("There are only 28 days in this month please re-enter your day..."); 
     dayentered = (Convert.ToInt16(Console.ReadLine())); 
    } 
} 

Console.WriteLine("{0}/{1}/{2}", dayentered, monthentered, year); 
Console.ReadKey(); 

while (monthentered == 01 || 03 || 05 || 07 || 08 || 10 || 12)有什麼不對嗎?我收到一個我不明白的錯誤。 "Operator '||' cannot be applied to operands of type 'bool' and 'int'"我的「while」語句有什麼問題

請幫忙。

+2

這不是你如何寫這樣的if。我假設你正在嘗試相當於'if(montheentered == 01)or(monthentered == 02)or ...)'? –

回答

1

應該

while (monthentered == 01 ||monthentered == 03 || monthentered ==05 || monthentered ==07 || monthentered ==08 || monthentered ==10 || monthentered ==12) 
3
while(monthentered == 01 || monthentered == 03 || monthentered == 05 || monthentered == 07 || monthentered == 08 || monthentered == 10 || monthentered == 12) 

||之間的每一個操作和& &不得不渲染一個布爾值(即一個完整的測試),因爲每一個操作是獨立計算

2

現在是像while(bool || int || int),我猜你想是這樣的:

while (monthentered == 1 || monthentered == 3 || monthentered == 5 /*|| ...*/) 

你需要每次檢查變量的值,因此它將是while(bool || bool || bool)

您還可以創建有效月份的集合並檢查輸入的數字是否在其中。

2

運算符'||'不能應用於類型「布爾」和「廉政」

不能使用在數字||的操作數 - 每一部分使用的是||與應計算爲bool

的條件應該是這樣的:

while (monthentered == 01 || 
     monthentered == 03 || 
     monthentered == 05 || 
     monthentered == 07 || 
     monthentered == 08 || 
     monthentered == 10 || 
     monthentered == 12) 

雖然一個更可讀的辦法是:

var validMonths = new int[] { 1, 3, 5, 7, 8, 10, 12 }; 

while(validMonths.Contains(monthentered)) 
0

C#,而只接受真/假表情!

while (monthentered == 01 || monthentered ==03 || monthentered ==05 || monthentered ==07 || monthentered ==08 || monthentered ==10 || monthentered ==12) 
0

應該

while (monthentered == 01 || 
     monthentered == 03 || 
     monthentered == 05 || 
     monthentered == 07 || 
     monthentered == 08 || 
     monthentered == 10 || 
     monthentered == 12) 

{ 
    //code here 
} 
1

你不能用一個|| operator比較boolintmonthentered == 01bool(true/false),其餘的是ints

因此改變,而到:

int[] allAllowedMonths = new[]{ 1, 3, 5, 7, 8, 10, 12 }; 
while (allAllowedMonths.Contains(monthentered)) 
{ 
    // ... 
} 
0

導致代碼編譯但不會工作直接回答:你需要使用

(monthentered == 01 || monthentered == 03 || monthentered == 05 || 
monthentered == 07 || monthentered == 08 || monthentered == 10 || 
monthentered == 12) 

其他問題:

  • 你的代碼允許32+天s在大多數月份。
  • 您的while月數循環將永不終止,因爲您永遠不會更改月份的值。改爲使用if語句。

額外提示:您可以使用DateTime.DaysInMonth,以獲得最大的數字,以便對每個月份和年份,而不是手動檢查月份數。這也將適應閏年。

+0

是嗎?我已經瞥了一眼。你能指出我犯了這個錯誤嗎? – Brucie67

+0

例如,如果你的月份是1,如果'(dayentered == 31)',而不是'(dayentered> = 31)',你只會說「本月只有30天」 – Rawling

+0

非常感謝你的支持幫幫我。我是編程課程的新手,我正在努力爭取。坦克你的幫助。 – Brucie67

0

這是繁瑣的語法,但你需要編寫while語句爲:

while (monthentered == 01 || monthentered == 02 || monthentered == 3 ...等

你的語句將首先評估布爾條件monthentered == 01,然後嘗試在邏輯上或與結果其他數字,因此是錯誤。

但是,我會看看你正在嘗試做什麼,看看一個while循環是否真的是你想要的。