2016-03-03 25 views
-2

我正在做簡單的名稱生成器,它的工作原理是這樣的:我得到一個名稱值爲數組的4個元素,我使用隨機類從數組中選擇特定的名稱,接下來我使用switch case驗證選擇哪一個並將其打印到控制檯。如何使開關盒的語法更小?

但是,它只有4個元素,但是當我嘗試使100個元素變成4個元素時呢?我試圖在for循環中增加切換大小寫來增加所有的情況,但事實證明case索引應該是const。那麼,還有沒有其他可能的方式使開關盒更靈活,更小?

下面是intersed http://pastebin.com/bbCxLtRq

+5

發佈您的代碼,而不是鏈接到您的代碼。 – LarsTech

+4

爲什麼不直接使用隨機數來索引數組? – TeaDrivenDev

+1

哦,親愛的,這麼多的小貓被殺...... – leppie

回答

0

讓你的方法的獨立固定長度:

public static string NameGen() 
{ 
    int index = random.Next(Names.Length); 
    return Names[index]; 
} 

public static string SurnameGen() 
{ 
    int index = random.Next(Surnames.Length); 
    return Surnames[index]; 
} 
4

代碼沒有switch需要:

if (NameIndex >= 0 && NameIndex <= 3) 
{ 
    return Name[NameIndex]; 
} 
return null; 

有了更復雜的例子,你可以用return擺脫break

而不是

switch (NameIndex) 
     { 
      case 0: 
       name = Name[0]; 
      break; 

      case 1: 
       name = Name[1]; 
      break; 

      case 2: 
       name = Name[2]; 
      break; 

      case 3: 
       name = Name[3]; 
      break; 
     } 
     return name; 

switch (NameIndex) 
     { 
      case 0: 
       return Name[0]; 

      case 1: 
       return Name[1]; 

      case 2: 
       return Name[2]; 

      case 3: 
       return Name[3]; 
     } 
    return null; 
+2

我會把「或只是」放在答案的頂部,然後_提供替代方案。它很簡單,很容易忽略。 –

+1

@DStanley的問題是關於switch .. case語句。 – enkryptor

+0

實際上,第二個例子不會編譯,因爲它沒有默認情況下的返回值,最後一個例子也有類似的問題,因爲返回值是在'if'中。 – juharr

1

正如在評論中提到的,沒有必要爲Switch語句來實現這一目標 - 參考下面的代碼片段爲例:

public class Generate 
{ 
    static string[] Name = new string[] { "Mariusz", "Janusz", "Bogdan", "Zbigniew" }; 
    static Random random = new Random(); 

    public static string NameGen() 
    { 
     return Name[(int) random.Next(3)]; 
    } 
} 

如果您確實需要使用Switch聲明(出於某種原因,可能只是爲了說教目的),那麼有一種方法來簡化它像下面的代碼片段所示:

switch (NameIndex) 
     { 
      case 0: 
      case 1: 
      case 2: 
      case 3: 
       return Name[NameIndex]; 
     } 

希望這可以幫助