2017-03-22 22 views
3

模量我是初學者學習C#結束,我有此代碼顯示的在c#數字從1至100,使得每行具有10

static void Main(string[] args) 
{ 
    int a = 0; 
    while (a < 100) 
    { 
     a = a + 1; 
     if ((a % 10) == 0) 
     { 
      Console.WriteLine(a); 
     } 
     else 
     {    
      Console.Write(a); 
      Console.Write(","); 
     }     
    } 
} 

是否有寫這個代碼的更有效的方式?我覺得在c#中可能有更好的方法。這是我的第一個代碼。我會很感激迴應。謝謝

+3

我投票結束這個問題作爲題外話,因爲它是關於審查,因此應該去codereview.stackexchange.com – HimBromBeere

+1

歡迎來到StackOverflow。雖然我給你寫了一個答案,但我同意HimBromBeere來解決這個問題。查看codereview網站,當您想要改進工作代碼時,這是值得的。 –

回答

6

短版本是這樣的:

int stepSize = 10; 

for (int i = 1; i < 100; i+=stepSize) 
{ 
    Console.WriteLine(String.Join(",", Enumerable.Range(i, stepSize))); 
} 

說明:

您通過您的for循環中走10步。在每個步驟 Enumerable.Range方法創建一個數組,其中包含從開始值(i)枚舉的數字,直到計數值(10)。

String.Join方法,採用此數組中的每個元素,並將它們組合成一個,

分隔字符串,因爲它看起來像功課:

你應該研究如何使用String.Format。這樣,您可以將元素排列在特定位置的一行中。

對於使用計數器變量的迭代,最好使用for循環,因爲它的確是爲了清晰可讀的頭部簽名而製作的。

你實際上寫了一個非常可讀的代碼,在我看來這是很有效率的。縮短代碼行並不一定更高效,更快或更具可讀性。有時,唯一的好處是,它看起來多了幾分優雅;)這是所有

編輯:

你甚至可以把它降低到一個行:

Console.WriteLine(Enumerable.Range(0, 10).Select(x => String.Join(",", Enumerable.Range(x * 10 + 1, 10)))); 

它是短暫的,但這是可怕的閱讀和理解:)

3

第一步將使用foor循環代替。

for(int i = 0; i <= 100; i++) 
{ 
    if ((i % 10) == 0) 
    { 
     Console.WriteLine(i); 
    } 
    else 
    { 
     Console.Write(i); 
     Console.Write(","); 
    } 
} 

您可以取代

Console.Write(i); 
Console.Write(","); 

Console.Write(string.Format("{0},", i)); 

甚至更​​好

Console.Write($"{i},"); 
1

只是另一種方法

for (var i = 1; i <= 100; i++) 
{ 
    Console.Write(i); 
    Console.Write(i % 10 == 0 ? Environment.NewLine : ","); 
} 
+2

我想爲初學者這一行:'i%10 == 0? Environment.NewLine:「,」'真的需要幾行解釋... –

+0

@MongZhu OP可以問我是否真的需要,我會盡我所能在這種情況下:) – tym32167

相關問題