2012-12-16 5 views
-1

그래서 로또 게임을 만들고 있습니다. 행운의 숫자를 6 개 입력해야하며, 로또 번호와 같으면 승리합니다.로또 프로그램이 중지되지 않습니다

여기 내 코드입니다 :

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

namespace OefeningExaam 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Random getal = new Random(); 
      int[] lottotrekking = new int[6]; 

      Console.WriteLine("Geef je geluksgetallen in <tussen 1 en 42>"); 
      Console.WriteLine("Geef je eerste getal in"); 
      int getal1 = Convert.ToInt32(Console.ReadLine()); 
      Console.WriteLine("Geef je tweede getal in"); 
      int getal2 = Convert.ToInt32(Console.ReadLine()); 
      Console.WriteLine("Geef je derde getal in"); 
      int getal3 = Convert.ToInt32(Console.ReadLine()); 
      Console.WriteLine("Geef je vierde getal in"); 
      int getal4 = Convert.ToInt32(Console.ReadLine()); 
      Console.WriteLine("Geef je vijfde getal in"); 
      int getal5 = Convert.ToInt32(Console.ReadLine()); 
      Console.WriteLine("Geef je zesde getal in"); 
      int getal6 = Convert.ToInt32(Console.ReadLine()); 

      while (getal1 != lottotrekking[0] || getal2 != lottotrekking[1] || getal3 != lottotrekking[2] || getal4 != lottotrekking[3] || getal5 != lottotrekking[4] || getal5 != lottotrekking[4] || getal6 != lottotrekking[5]) 
      { 

       for (int i = 0; i < lottotrekking.Length; i++) 
       { 
        int cijfer = getal.Next(1, 43); 
        lottotrekking[i] = cijfer; 
        Console.WriteLine(lottotrekking[0] + "\t " + lottotrekking[1] + "\t " + lottotrekking[2] + "\t " + lottotrekking[3] + "\t " + lottotrekking[4] + "\t " + lottotrekking[5]); 
       } 
      } 

      if (getal1 == lottotrekking[0] && getal2 == lottotrekking[1] && getal3 == lottotrekking[2] && getal4 == lottotrekking[3] && getal5 == lottotrekking[4] && getal5 == lottotrekking[4] && getal6 == lottotrekking[5]) 
      { 
       Console.WriteLine(lottotrekking[0] + " " + lottotrekking[1] + " " + lottotrekking[2] + " " + lottotrekking[3] + " " + lottotrekking[4] + " " + lottotrekking[5]); 
      } 

      Console.ReadLine(); 
     } 
    } 
} 

문제는 프로그램이 단지가는 유지하고 중단하지 않습니다. 행운의 숫자가 로또 번호와 같을 때 멈추기로되어 있습니다.

+5

귀하의 프로그램은 추첨을받는 것보다 더 쉽게 멈출 수 있습니다. 숫자가 정확할뿐만 아니라 순서대로 있어야합니다. – GolfWolf

+1

잠깐, 당신은 맞는 숫자를 추측 했습니까? 와우! 운이 좋다. 편집 : 오, 신경 쓰지 마세요,이 시도하고 그들을 무작위로 얻을 수 있습니까? 글쎄, 당신은 잠시 기다려야 할 수도 있습니다 ... 평균 2,744,515,872 반복 ... – Ryan

+0

하지만 어떻게 할 수 있습니까, 나는 시험을 tommorrow 있고 무엇을 해야할지 모르겠다 ... –

답변

0

는 이것은 정확한 숫자를 추측 대략 2 분 소요 난수를 생성한다.

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

namespace OefeningExaam 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Random getal    = new Random(); 
      int[] lottotrekking  = new int[6]; 
      int[] userInput   = new int[6]; 
      bool isLotteryWon  = false; 
      int numberOfIterations = 0; 

      Console.WriteLine("Geef je geluksgetallen in <tussen 1 en 42>"); 
      Console.WriteLine("Geef je eerste getal in"); 
      userInput[0] = Convert.ToInt32(Console.ReadLine()); 
      Console.WriteLine("Geef je tweede getal in"); 
      userInput[1] = Convert.ToInt32(Console.ReadLine()); 
      Console.WriteLine("Geef je derde getal in"); 
      userInput[2] = Convert.ToInt32(Console.ReadLine()); 
      Console.WriteLine("Geef je vierde getal in"); 
      userInput[3] = Convert.ToInt32(Console.ReadLine()); 
      Console.WriteLine("Geef je vijfde getal in"); 
      userInput[4] = Convert.ToInt32(Console.ReadLine()); 
      Console.WriteLine("Geef je zesde getal in"); 
      userInput[5] = Convert.ToInt32(Console.ReadLine()); 

      while (!isLotteryWon) 
      { 
       isLotteryWon = true; 

       // Generate the lottery numbers 
       for (int i = 0; i < lottotrekking.Length; i++) 
       { 
        int newNumber = getal.Next(1, 43); 

        while (Program.IsContained(lottotrekking, newNumber)) 
         newNumber = getal.Next(1, 43); 

        lottotrekking[i] = newNumber; 
       } 


       Console.WriteLine(lottotrekking[0] + "\t " + lottotrekking[1] + "\t " + lottotrekking[2] + "\t " + lottotrekking[3] + "\t " + lottotrekking[4] + "\t " + lottotrekking[5]); 

       //Compare lottery numbers to user input, if they match and are in the same order, the user wins. 
       for (int i = 0; i < lottotrekking.Length; i++) 
        isLotteryWon &= Program.IsContained(lottotrekking, userInput[i]); 

       numberOfIterations++; 
      } 

      Console.WriteLine(string.Format("Lottery won in {0} iterations", numberOfIterations)); 
      Console.ReadLine(); 
     } 

     /// <summary> 
     /// Determines whether the specified number is contained in the collection. 
     /// </summary> 
     /// <param name="collection">The collection.</param> 
     /// <param name="number">The number.</param> 
     /// <returns> 
     /// <c>true</c> if the specified number is contained in the collection; otherwise, <c>false</c>. 
     /// </returns> 
     private static bool IsContained(int[] collection, int number) 
     { 
      for (int i = 0; i < collection.Length; i++) 
      { 
       if (collection[i] == number) 
        return true; 
      } 
      return false; 
     } 
    } 
} 

enter image description here 는 나는 그것이 도움이되기를 바랍니다.

+0

하지만 프로그램이 이기기 전까지는 숫자를 무작위로 만들어야합니다. 프로그램에서 답장을 보내면됩니다. –

+0

그리고 당신은 틀렸어. 그들은 모두 일치하는 한 동일한 순서로있을 필요가 없습니다. –

+0

첫 번째 게시물에서 "행운의 숫자 6 개를 입력해야합니다. 그리고 그 숫자가 로또 번호와 같으면 승리합니다"라고 말했기 때문에 이 내용을 올바르게 이해하면 난수를 한 번만 생성하면되고 사용자 입력이 생성 한 숫자와 같은지 확인하십시오. 일치 할 때까지 더 많은 숫자를 계속 생성하는 목적은 무엇입니까? – AngelCastillo

0

이와 비슷한 기능이 작동합니다. 그러나 모든 숫자와 일치하는 데는 어느 정도 시간이 걸릴 것입니다. 이 사용자 입력과 일치 할 때까지

static void Main(string[] args) 
     { 
      Random getal = new Random(); 
      int[] lottotrekking = new int[6]; 

      var getals = new List<int>(); 

      Console.WriteLine("Geef je geluksgetallen in <tussen 1 en 42>"); 
      Console.WriteLine("Geef je eerste getal in"); 
      getals.Add(Convert.ToInt32(Console.ReadLine())); 
      Console.WriteLine("Geef je tweede getal in"); 
      getals.Add(Convert.ToInt32(Console.ReadLine())); 
      Console.WriteLine("Geef je derde getal in"); 
      getals.Add(Convert.ToInt32(Console.ReadLine())); 
      Console.WriteLine("Geef je vierde getal in"); 
      getals.Add(Convert.ToInt32(Console.ReadLine())); 
      Console.WriteLine("Geef je vijfde getal in"); 
      getals.Add(Convert.ToInt32(Console.ReadLine())); 
      Console.WriteLine("Geef je zesde getal in"); 
      getals.Add(Convert.ToInt32(Console.ReadLine())); 


      bool match = false; 
      while (!match) 
      { 
       //Reset the array 
       lottotrekking = new int[6]; 
       for (int i = 0; i < lottotrekking.Length; i++) 
       { 

        //Make sure we dont add one number several times 
        int cijfer = 0; 
        while (lottotrekking.Any(x => x == cijfer) || cijfer == 0) 
        { 
         cijfer = getal.Next(1, 43); 
        } 
        lottotrekking[i] = cijfer; 

       } 
       Console.WriteLine(lottotrekking[0] + "\t " + lottotrekking[1] + "\t " + lottotrekking[2] + "\t " + lottotrekking[3] + "\t " + lottotrekking[4] + "\t " + lottotrekking[5]); 

       match = lottotrekking.All(getals.Contains); 

      } 

      Console.WriteLine(lottotrekking[0] + " " + lottotrekking[1] + " " + lottotrekking[2] + " " + lottotrekking[3] + " " + lottotrekking[4] + " " + lottotrekking[5]); 


      Console.ReadLine(); 


     } 
    } 
+0

어딘가에서 휴식을 취해야한다고 생각합니까? –

+0

왜 그렇게 했습니까? 루프는 결국 깨질 것입니다. 나는 일치가 사실 일 때. – johan

+0

당신의 프로그램은 나의 것과 동일합니다 ... 절대 멈추지 않습니다 : s –

관련 문제