2012-06-24 4 views
3

for 문을 반복하고 번호 i를 0에서 100으로 늘리려고합니다. 이는 화면에 표시됩니다. 내 문제는 내가 (Main이 아닌) 메소드에서 반환하고 싶은 것을 이해하지 못하고 있지만 무엇이든지 반환해야하는 경우입니다.중첩 된 if 문에서 결과를 반환합니다.

int를 반환하고 싶지 않습니다. 반환 할 문자열이없는 것으로 생각합니다. 값을 반환하지 않는 함수를 수행하려고합니다. 나는 메소드 타입을 엉망으로 만들고 있다고 생각한다. if 문을 간단히 살펴보고 매개 변수가 일치하면 결과를 화면에 표시하고 하단으로 이동하지 않고 for 문에서 다시 시작하기를 원합니다.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Project5 
{ 
    class Program 
    { 
    int i = 0; 


    static void Main(int i) 
    { 
     do 
     { 
      for (i = 0; i < 101; i++) 
      { 
       Words(); 
      } 
     } while (i < 101); 

     Console.ReadLine(); 
    } 

    static string Words (int i) //<---Here I think I am using the incorrect method type 
    {//Which then screws up the method when it is called above. I have been going     
    //through method types but dont see anything that when called just perform a   
    //function and displays results. 

     string f = "Word1"; 
     string b = "Word2"; 

     if (i == 3) 
     { 
      Console.Write(f); 

      if (i == 5) 
      { 
       Console.Write(b); 

       if (0 == (i % 3)) 
       { 
        Console.Write(f); 

        if (0 == i % 5) 
        { 
         Console.Write(b); 
        } 
        else 
        { 
         Console.WriteLine(i); 
        } 
       } 

      } 
     } 

    } 
} 

}는 아무것도에게 반환 할 필요가 없습니다

static string 

다음

static void 

+0

나는 아무것도 반환하지 말아야한다고 생각합니다. int 또는 문자열이 아닌 void 만 사용하십시오. 그리고 100까지 계속 실행하십시오. – nawfal

+1

이 코드에는 너무 많은 이상한 것들이 있습니다. 당신은 단어에 어떤 매개 변수도 전달하지 않습니다. 그렇다면 통과 한 경우를 제외하고는 매개 변수를 벗어난 루프를 업데이트하지 않습니다. 그러면 if가 모두 중첩됩니다. Word1을 한 번 인쇄하는 것 이외에 다른 작업을 수행하는 방법을 알지 못합니다. –

+0

문자열 메서드를 많은 작업을 수행하고 해체해야 할 필요가 있다고 생각합니다. – Dan

답변

3

변경 또한

당신은 아마 같이 루프을 제거해야합니다 그것은 리던던트이다. t, for 루프는 당신이 원하는 것을 해줘야한다 (나는 생각한다).

+0

무한 루프가 발생하지 않을 것입니다. 두 경우 모두 i> 100을 기다리고, for 문에서'i ++'때문에 모두 통과합니다. – doogle

+0

아, 좋은 점은 for 루프가 새로운 인스턴스를 선언하고 있다고 생각했지만 그렇지 않습니다. –

0

앞에서 설명한 것처럼 메서드 서명을 static string Words에서 static void Words으로 변경하고 Words 메서드에서 더 이상 반환해야하는 것을 알고 있습니다. void은 메소드 서명 컨텍스트에서 아무 것도 참조하지 않는 키워드입니다.

에서 전화 할 때 Words의 필수 매개 변수를 전달하지 않는 것 같습니다. 난 당신이 Words(i);

마지막으로 의미 대신 Words();의 있으리라 믿고있어, 당신은 정적 클래스 멤버와 예를 하나의 차이를 조회 할 수 있습니다. 즉, 예를 회원은 동일한 클래스의 정적 회원 만 정적 회원 수없는에 액세스 예를 멤버에 액세스 할 수 있습니다. 당신이 인스턴스 인 변수로 i을 선언했기 때문에 이것을 가져오고 또한 static 메서드 모두에서 로컬 i 변수를 만듭니다. 귀하의 경우에 어떤 일이 일어나게되는지는 인스턴스i이 실제로 사용되지 않습니다. 대신 정적 메서드는 자체 로컬 i 변수를 사용합니다.

2

외에도 반환에서 입력 할 것을 void 난 당신이 for 루프에서이 Words(i);처럼 변수 i에 단어 방법을 전달해야

  1. 을 볼 수 있듯이 지금까지 몇 가지 문제가있다.
  2. for 주위의 while을 제거하여 동일한 작업을 수행 할 수 있습니다.
  3. 단어의 논리가 잘못되었습니다.i은 둘 다 3과 5와 같을 수 없으므로 첫 번째 Console.WriteLine(); 만 실행됩니다. 대신 모든 항목을 반복 할 때마다 모든 항목을 검사하도록 언로드해야합니다.
+0

AH! 나는 중첩하고 첫번째 성냥은 그것을 정확하게 끊을 것이다? – Dan

+0

첫 번째 경기는 중단되지 않습니다. 콘솔에 쓰고 그 후에 두 번째'if (i == 5) '을 테스트합니다. 그것은 우리가'i == 3'을 결정한 것처럼 아닙니다. 내 제안은 제어 흐름 및 아마도 일반적으로 프로그래밍과 관련한 몇 가지 기본 서적을 검색하는 것입니다. :) – Frank