2012-07-25 219 views
0

我正在尝试使用for循环。使用嵌套for循环

如果输入3,其结果将是:

1** 
*2* 
**3 

所以我用这个代码

void button1_Click(object sender, EventArgs e) { 
    string message = " "; 
    int value = numericUpDown1.Value; 
    for(int count = 0; count < value; count++) { 
     for(int m = -2; m < value; m++) { 
      message += "*"; 
     } 
     message += "\r\n"; 
    } 
    MessageBox.Show(message); 
} 

我使用的两个for循环,但我不能确定它显示数, 但它给我

*** 
*** 
*** 
+1

忘记它标签作为homew ork? – Habib 2012-07-25 04:14:44

+0

你的号码将是你的计数变量+1 – 2012-07-25 04:20:42

回答

3
int digitCount = 3; 
string message = " "; 
for (int round = 1; round <= digitCount; round++) 
{ 
    for (int digit = 1; digit <= digitCount; digit++) 
    { 
     if (digit == round) 
     { 
      message += digit; 
     } 
     else 
     { 
      message += "*"; 
     } 
    } 

    message += "\r\n"; 
} 
+0

声明此代替字符串消息; – 2012-07-25 04:26:55

+1

永远不要教一个初学者在+ + – 2012-07-25 07:00:00

1
private string StarNumbers(int input) 
    { 
     var range = Enumerable.Range(1, input); 
     var sb = new StringBuilder(input*input); 
     foreach (var number in range) 
     { 
      var line = String.Format("{0}{1}{2}", new string('*', number - 1), number, new string('*', input - number)); 
      sb.AppendLine(line); 
     } 
     return sb.ToString(); 
    } 

编辑:

此代码为输入= 500:2ms的

(5ms的输入端1 000)使用输入+ =字符串连接

代码= 500:33 468ms(所有它确实是垃圾收集)

(运行它几分钟,输入1000,仍然一无所获)

+0

循环中连接字符串你的建议解决方案过于设计,难以阅读,因此更容易出现错误。另外,在这种简单的场景中,你的String.Format使用更多的资源而不是连接字符串。你声明的字符串生成器的大小是由一个等于2xinput的常量关闭的,因此它需要扩展,因此需要额外的资源(你没有考虑换行)。简单是王道。 – jtimperley 2012-07-25 12:25:01

+0

实际上你在资源方面是错的,你可以很容易地测量它们之间的区别;) – 2012-07-25 15:05:10

+0

stringbuilder只需要扩展一次,每次创建+ = new字符串。 – 2012-07-25 15:07:03