2011-11-30 187 views
0

下面是我想要做的邏輯。可以幫助我使用C#解決此問題。有人可以幫助我解決這個邏輯使用C#

string strMessage=string.empty; 
for (int i = 0; i < 20; ++i) 
{ 
    switch i 
     { 
     Case 1,2,7,5: 
      strMessage="You Won"; 
    break; 
     Case 6,8,10,3: 
      strMessage="You can try again"; 
    break; 

     } 

    } 
Response.write(strMessage); 

每當我的值是1,2,7或5 strMessage =「你贏了」 每當我的值是6,8,10或3 strMessage =「你可以再試一次」

+0

你想做什麼?你想問一個用戶輸入嗎? –

+0

這裏沒有linq ...你不需要標籤...如果這是作業,請添加一個作業標籤 –

+0

@The King:你試圖做彩票遊戲嗎? – culithay

回答

1

你可以用類似

public string Evaluate(int value) 
{    
    if (new[] {1, 2, 7, 5}.Contains(value)) return "You Won"; 
    return new[] {3, 6, 8, 10 }.Contains(value) ? "Try again" : ""; 
} 

不知道你試圖用你的循環做...看起來有點破去,但如果你試圖寫出每個0 ..19

Enumerable.Range(0, 20).Select(Evaluate).ToList().ForEach(Response.write); 
+0

不知道爲什麼這得到了downvoted? –

+0

downvote可能是因爲這個代碼,即使它是正確的,也許看起來很酷,它比一個簡單的開關/外殼慢。每次調用它時都會創建新的數組,然後使用變量對其進行初始化,您是否曾經看到這是如何被拆開的? - 以及包含如何進行最終搜索......?太慢了。 – Aristos

+0

@Aristos,總是優化最後....在這種情況下,因爲案例數量太少,任何節省在「納米/微秒」中都不是非常關鍵的,如果它有更長的時間,我可能會去到一個哈希列表(如果它變得太長,交換機會變成什麼樣子)。 –

1

您的循環將導致打印所有消息,以及12個空行。

這裏是你所擁有的一些僞代碼:

for the values 0 to 19 
    if i == 1 or 2 or 7 or 5 then message = "You Won" 
    else if i == 3 or 6 or 8 or 10 then message = "You can try again" 
    else message = string.empty 

,如果你在你的腦袋走過你的代碼,或使用鉛筆和紙您的問題將變得清晰。

因此,當它遇到你最大的數字(它的10)時,信息將被設置爲「你可以再試一次」並且不會再次設置。

所以,當循環結束的消息將是「你可以再試一次。」 ......解決這個問題,無論是移動你的Response.Write是循環內

交換機上的語法都錯了:

switch (i) 
{ 
    case 1: 
    case 2: 
    // do something 
    break; 
} 

here is the MSDN reference for switch

一般準則是可以有多個case語句一起,而是一個case不能通過(++像它可以在C/C)下降,它有在一個break;

+0

其實它只是打印出'你可以再試一次'(獲取設置爲i = 10,然後再不碰):) – Rob

+0

你的權利,錯過了Response.Write的位置...更新我的psuedocode –

7
string strMessage = string.Empty; 

for (int i = 0; i < 20; ++i) 
{ 
    switch(i) 
    { 
     case 1: 
     case 2: 
     case 7: 
     case 5: 
      strMessage = "You Won"; 
      break; 
     case 6: 
     case 8: 
     case 10: 
     case 3: 
      strMessage = "You can try again"; 
     break; 
    } 
} 

Response.write(strMessage); 
+1

這是正如另一篇文章所說,它只會將字符串設置爲「你可以再試一次」。 –

0

每種情況下結束可以表示只有一個值,所以你想要做的就是讓案件沒有休息:

string strMessage=string.empty; 
for (int i = 0; i < 20; ++i) 
{ 
    switch i 
     { 
     Case 1: 
     Case 2: 
     Case 7: 
     Case 5: 
      strMessage="You Won"; 
    break; 
     Case 6: 
     Case 8: 
     Case 10: 
     Case 3: 
      strMessage="You can try again"; 
    break; 

     } 

    } 
Response.write(strMessage); 
0

我相信你有麻煩編譯這一點,因爲像「Case1,2,7,5」聲明無效。

相反,您需要將它們分層並根據需要使用fallthrough/break。

我相信這是你想達到什麼目的:

for (int i = 0; i < 20; i++) 
{ 
    switch (i) 
    { 
    Case 1: 
    Case 2: 
    Case 5: 
    Case 7: 
     strMessage="You Won"; 
     break; 
    Case 3: 
    Case 6: 
    Case 8: 
    Case 10: 
     strMessage="You can try again"; 
     break; 
    } 

} 

參閱相關的問題Multiple Cases in Switch

2

這個特殊的代碼將永遠爲循環導致

strMessage = "You can try again"; 

因爲和當i> 10時,交換機不會做任何事情。

+0

好的一點。 – Aristos

0

你應該這樣寫:

string strMessage = string.Empty; 
     for (int i = 0; i < 20; ++i) 
     { 
      switch (i) 
      { 
       case 1: 
       case 2: 
       case 7: 
       case 5: 
        strMessage="You Won"; 
        break; 
       case 6: 
       case 8: 
       case 10: 
       case 3: 
        strMessage="You can try again"; 
        break; 
      } 
     } 
相關問題