2012-07-25 5 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); 
} 

내가 두에 대한 - 루프를 사용하여이 코드를 사용하지만, 내가 보여 고칠 수없는 수는 는하지만 나에게

*** 
*** 
*** 
+1

이 homew로 태그를 잊어

(아직 입력 한 000 아무것도) 몇 분 동안 실행 가비지 컬렉션)입니다 않습니다 오크? – Habib

+0

숫자가 카운트 변수가됩니다. +1 –

답변

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

대신이 문자열 메시지를 선언하십시오. –

+1

+ 초보자에게 + = –

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(); 
    } 

EDIT :

입력이 코드 = 500 : 2ms의

입력 + = 문자열 연결을 사용

코드 (입력 1 000의 5ms) = 500 : 33 468ms (모든

+0

루프로 concat 문자열을 가르치지 마십시오 제안 된 솔루션이 설계가 끝났으며 읽기가 어려워 버그가 발생하기 쉽습니다. 또한 String.Format은 간단한 시나리오에서 문자열을 연결하는 것보다 더 많은 리소스를 사용합니다. 선언 된 문자열 작성기의 크기는 2xinput과 같은 상수로 인해 해제되므로 확장해야하므로 추가 리소스가 필요합니다 (새 줄을 고려하지 않았습니다). 단순함이 왕이다. – jtimperley

+0

실제로 리소스 문제가 잘못되었으므로 차이를 쉽게 측정 할 수 있습니다. –

+0

stringbuilder는 매번 + = 새 문자열이 만들어지면서 한 번만 확장해야합니다. –