2013-10-11 6 views
6

से यादृच्छिक तत्व का चयन करें मैं थोड़ा क्विज़ कंसोल एप्लिकेशन बना रहा हूं। मैंने इसमें 3 प्रश्नों के साथ एक सूची बनाई है। मैं प्रोग्राम को यादृच्छिक रूप से एक प्रश्न का चयन कैसे कर सकता हूं और इसे कंसोल में प्रिंट कर सकता हूं?सी # सूची

मैंने कुछ अलग कोडों की कोशिश की है लेकिन ऐसा लगता है कि यह किसी कारण से काम नहीं कर रहा है। यह पिछले कोड मैंने कोशिश की है, जो मैं इस साइट से किसी अन्य उपयोगकर्ता से मिल गया है, लेकिन मैं त्रुटियों मिल:

"The name 'string' does not exists in current context" 

"जब से 'Quiz.Questions.main()' शून्य देता है, एक वापसी कीवर्ड चाहिए

class Questions 
{ 
    public static void main() 
    { 
     var questions = new List<string>{ 
      "question1", 
      "question2", 
      "question3"}; 
     int index = Random.Next(strings.Count); 
     questions.RemoveAt(index); 
     return questions; 

    } 

}

आप अपने सभी प्रतिक्रिया के लिए धन्यवाद: एक वस्तु अभिव्यक्ति "

यहाँ कोड के अंतिम टुकड़ा है जो मैंने कोशिश की है, जिसके बाद नहीं किया जा। मैंने सूची के बजाय सरणी बनाकर अपनी समस्या तय की है।

class Questions 
{ 
    public static void main() 
    { 
     string[] questions = new string[3]; 
     questions[0] = "question1"; 
     questions[1] = "question2"; 
     questions[2] = "question3"; 
     Random rnd = new Random(); 
     Console.WriteLine(questions[rnd.Next(0,2)]); 
    } 
} 
+0

आप अपने विधि कैसे कहते हैं? वर्तमान में एक शून्य प्रकार के रूप में आपको रिटर्न-वैल्यू 'प्रश्न' – HimBromBeere

+3

डुप्लिकेट => http://stackoverflow.com/questions/2019417/access-random-item-in-list – gleng

+1

var randomQuestion = प्रश्न [ नया यादृच्छिक() अगला (प्रश्न। गणना)]; सुनिश्चित करें कि सूची शून्य नहीं है – iulian3000

उत्तर

4

आप एक System.Console.WriteLine बयान की जरूरत है: यह अब मेरी कोड है।

class Questions 
{ 
    public static void main() 
    { 
     var questions = new List<string>{ 
      "question1", 
      "question2", 
      "question3"}; 
     int index = Random.Next(questions.Count); 
     System.Console.WriteLine(questions[index]); 

    } 
} 
+0

इसके अलावा स्ट्रिंग्स। गणना को प्रश्नों द्वारा प्रतिस्थापित किया जाना चाहिए। गणना और यादृच्छिक। अगला (...) नए यादृच्छिक() द्वारा। अगला (...)। –

+0

धन्यवाद एलेक्सी। सही किया। –

+0

@AlexeyMitev: 'नया रैंडम()। अगला' में यह गड़बड़ी है कि यह अलग-अलग संख्याएं नहीं बनाएगा यदि इसे छोटे अंतराल पर बार-बार कहा जाता है। –

1

"नाम 'स्ट्रिंग' वर्तमान संदर्भ में मौजूद नहीं है" मुझे लगता है आप

int index = random.Next(questions.Count); // according to the lower-case random see last paragraph 
बजाय

int index = Random.Next(strings.Count); 

चाहते वहाँ के बाद से कोई परिवर्तनीय बुद्धि नहीं है एच नाम strings और आप वैसे भी एक प्रश्न को हटाना चाहते हैं।

इसके अलावा, आप void विधि से कुछ वापस नहीं कर सकते हैं। तो एक ही है कि सूची लौटाती है बनाने के लिए:

private Random random = new Random(); 
List<string> GetRemoveQuestion(List<string> questions) 
{ 
     int index = random.Next(questions.Count); 
     questions.RemoveAt(index); 
     return questions; 
} 

संपादित: पिछले लेकिन कम से कम नहीं है, तो आप Random.Next उपयोग नहीं कर सकते। ऐसा लगता है कि Next विधि Random में विधि है जो मामला नहीं है। इसलिए मैंने ऊपर दिखाया है कि आप कैसे एक उदाहरण बनाते हैं और उपयोग करते हैं। ध्यान दें कि आपको इसे विधि नहीं बनाना चाहिए क्योंकि यह इलाज समय के साथ बीजित है। यदि आप इस विधि को बहुत तेज़ी से कॉल करेंगे तो आपको अक्सर "यादृच्छिक" मान मिल जाएगा।

अधिक जानकारी के लिए msdn at the remarks section पर एक नज़र डालें।

+1

बहुत यकीन है कि रैंडम में स्थिर नहीं है अगला विधि –

+0

@WeylandYutani: धन्यवाद, तदनुसार मेरा जवाब संपादित करें। –

11

क्या आप वाकई एक प्रश्न हटाना चाहते हैं और बाकी के प्रश्नों को वापस करना चाहते हैं? क्या आपको केवल एक का चयन नहीं करना चाहिए? इस तरह कुछ:

public static void main() 
{ 
    var random = new Random(); 
    var questions = new List<string>{ 
     "question1", 
     "question2", 
     "question3"}; 
    int index = random.Next(questions.Count); 
    Console.WriteLine(questions[index]); 
} 
0

आपके पास कुछ मामूली त्रुटियां हैं।

आपको Rand ऑब्जेक्ट के संदर्भ की आवश्यकता है।आप questions के बजाय strings पर देख रहे हैं। आप इसे चुनने के बजाय तत्व को हटा रहे हैं।

इस प्रयास करें:

void Main() 
{ 
    Random rand = new Random(); 
    var questions = new List<string>{ 
     "question1", 
     "question2", 
     "question3"}; 
    int index = rand.Next(questions.Count); 
    return questions[index]; 
    // If you want to use Linq then 
    // return questions.Skip(index).Take(1); 
} 
0

कुछ इस तरह हो सकता है कि आप क्या चाहते:

private Random rng; 
T PickRandom<T>(List<T> list) 
{ 
    return list[rng.NextInt(list.Count)]; 
} 

आप इसे से एक यादृच्छिक तत्व प्राप्त करने के लिए अपनी सूची में यह कह सकते हैं। इस

public static void main() 
{ 
    var questions = new List<string>{ 
     "question1", 
     "question2", 
     "question3"}; 
    Random rnd = new Random(); 
    int index = rnd.Next(questions.Count) 
    string question = questions[index]; 
    questions.RemoveAt(index); // Are you sure you neex to remove? 

    System.Console.WriteLine(question); 
} 

तरह

3

कोशिश कुछ जहां string बजाय questions उपयोग कर रहे हैं लिखने में कोई गलती नहीं है। इसके अलावा, Random ऑब्जेक्ट को इंटिलाइज्ड करने की आवश्यकता है।

1

अन्य खोजकर्ताओं के लिए लाभ: यदि आप एक कम होते सूची चाहते हैं ताकि आप सुनिश्चित करें कि आप एक यादृच्छिक फैशन में सभी वस्तुओं का उपयोग तो ऐसा करते हैं:

//use the current time to seed random so it's different every time we run it 
Random rand = new Random(DateTime.Now.ToString().GetHashCode()); 
var list = new List<string>{ "item1", "item2", "item3"}; 

//keep extracting from the list until it's depleted 
while (list.Count > 0) { 
    int index = rand.Next(0, list.Count); 
    Console.WriteLine("Rand Item: " + list[index]); 
    list.RemoveAt(index); 
} 
संबंधित मुद्दे