2017-12-08 16 views
-2

메신저에서 함수를 호출하고 matchplay 클래스의 롤 번호를 사용할 수있게하려고합니다 ... 가능합니까?다른 클래스 함수를 사용하여 C#

public class DieClass 
{ 
    public void DiceRoll(int min, int max) 
    { 
     Random random = new Random(); 

     int roll1 = random.Next(0, 6); 
     int roll2 = random.Next(0, 6); 
     int roll3 = random.Next(0, 6); 
    } 
} 

public class MatchPlay 
{ 
    public void Match() 
    { 
     DieClass.DiceRoll(); 

     Console.WriteLine("Starting Match Play..."); 
     Console.WriteLine(); 
     Console.WriteLine("Round One"); 
     Console.WriteLine("Your first dice is [0]", roll1); 
     Console.WriteLine("Your second dice is [0]", roll2); 
     Console.WriteLine("Your third dice is [0]", roll3); 
    } 
} 

}

+0

클래스는 개체가 아닙니다. 예를 들어 청사진과 같습니다. DieClass 타입의 객체와 객체를 인스턴스화하여 객체로 사용해야합니다. [ask]를 읽고 [둘러보기]를 가져 가야합니다. – Plutonix

+0

먼저 C# 기본 사항을 알아야합니다. DiceRoll 정적 메소드를 만들거나 DieClass를 인스턴스화하십시오. 또한 min, max 매개 변수를 전달하십시오. 인쇄하려면 값을 반환해야합니다. – Sunil

답변

2

은 어느 당신은 DiceRollstatic 방법을 만들거나 DieClass의 인스턴스를 만들고 해당 통해 메소드를 호출 할 필요가있다.

예를 들어, 당신은

public static void DiceRoll(int min, int max) 

로 방법을 선언 할 수있다 또는 당신은 같은 객체 인스턴스화 할 수 있습니다 :

말했다되고 그건
DieClass dice = new DieClass(); 

dice.DiceRoll(0, 6); 

, 당신이 당신의 DieClass 클래스, 대부분의 다른 문제가 발생을 분명한 것은 호출자에게 결과를 다시 전달하는 수단이 필요하다는 것입니다. 가장 쉬운 방법은 DiceRoll()이 단일 결과를 생성하여 반환하는 것입니다. 또한 06random.Next()의 매개 변수로 하드 코딩했습니다. 매개 변수 한 쌍인 minmax이 예상 되긴했지만.

4

은 'fixin 필요 몇 가지가 있습니다 : 당신이 그것을 사용하기 위해 DiceClass 클래스의 인스턴스를 만들 필요가 거라고 그래서

  • 귀하의 DiceRoll 인스턴스 메서드입니다.
  • 변수는 로컬 변수이므로 메서드가 완료되면 사용할 수 없습니다. 대신 수업의 공개 속성으로 만들 수 있습니다.
  • 메서드가 호출 될 때마다 Random을 새로 인스턴스 할 필요가 없습니다. 실제로는 Random에 시스템 시계를 기반으로하는 값이 입력되어 있기 때문에 문제가 발생할 수 있습니다. 따라서 메서드가 매우 빠르게 호출되면 같은 번호를 반복해서 만들어 낼 것입니다.) 그냥 정적으로 만들 수 있고 한 번 인스턴스화 할 수 있습니다.
  • Roll 메서드에 대한 인수가 minmax이므로이 값을 사용하지 않아야합니까? 현재 06이 하드 코드되어 있습니다.
  • 형식 문자열을 사용하려면 대괄호 ([]) 대신에 curley braces ({})를 사용해야합니다.
  • 마지막으로 명명 규칙의 관점에서 사용자는 클래스 이름의 일부로 Class이라는 단어가 필요 없으며 메서드 이름의 일부로 Dice이 필요하지 않습니다. 이것은 타이핑의 양을 단순화 할 것이고 여전히 이해할 수있을 것입니다.

단일 Die 개체를 나타내는 클래스를 만드는 일을 생각하고, 그것을 Roll() 방법 및 Value 속성을 줄 수있는 무엇.그런 다음 사용자가 원하는만큼을 만들 수 있으며, 목록에 보관 :

public class MatchPlay 
{ 
    public void Match() 
    { 
     // Add three Die objects to our list of dice 
     List<Die> dice = new List<Die> 
     { 
      new Die(), new Die(), new Die() 
     }; 

     Console.WriteLine("Starting Match Play..."); 
     Console.WriteLine(); 
     Console.WriteLine("Round One"); 

     // Roll all dice 
     dice.ForEach(d => d.Roll()); 

     Console.WriteLine("Your first dice is {0}", dice[0].Value); 
     Console.WriteLine("Your second dice is {0}", dice[1].Value); 
     Console.WriteLine("Your third dice is {0}", dice[2].Value); 
    } 
} 

을 마지막으로 우리가 경기를 찰 수, 다음과 같이 이제

public class Die 
{ 
    public int Value { get; set; } 

    // Make this static and instantiate it only once to avoid re-seeding issues 
    private static readonly Random rnd = new Random(); 

    public Die() 
    { 
     Value = 1; 
    } 

    public void Roll() 
    { 
     // This method uses values 1-6 as a standard die 
     Roll(1, 6); 
    } 

    public void Roll(int minValue, int maxValue) 
    { 
     Value = rnd.Next(minValue, maxValue + 1); 
    } 
} 

, 당신은 Die 클래스를 사용할 수 있습니다 Main 방법의 경우 :

private static void Main() 
{ 
    MatchPlay game = new MatchPlay(); 
    game.Match(); 

    Console.WriteLine("\nDone!\nPress any key to exit..."); 
    Console.ReadKey(); 
} 
+0

좋은 직장. 나는 롤도 값을 돌려 주겠다.하지만 작은 점 – pm100

+0

오, 좋은 생각이다. 그러면 Console.WriteLine ("주사위를 굴린 후 그 값은 {0}", 주사위 [0] .Roll());' –