2012-10-31 3 views
0

Juste un peu perdu ici. Mon problème est que j'ai écrit un simple bloc de code qui permet à un utilisateur de sélectionner un fruit. Le code fait ce que je veux pour faire un problème, j'ai besoin de revenir au début du code pour que l'utilisateur puisse re-sélectionner un des fruits optionnels.C# Boucler un bloc de code (contenant un tableau)

Cependant, je ne peux pas sembler le faire fonctionner mais je suspecte que le problème est ma compréhension des boucles qui exigeront plus d'attention. Je comprends que j'aurais besoin d'un initialiseur et d'une condition quelconque pour que la boucle s'exécute. J'ai essayé beaucoup de choses (folles) en essayant d'exécuter la boucle comme ceci: pour (string [] fruitArray = {"Banana", "Apple", "Orange", "Pineapple"}); mais le compilateur n'en a aucune et j'imagine que la communauté Stack Overflow ne l'accepterait pas non plus. Toute aide et conseil est apprécié.

{ 

      Console.WriteLine("\n", "\n"); 

      string[] fruitArray = {"Banana", "Apple", "Orange", "Pineapple"}; 

      Console.WriteLine("Please select your fruit: \n\n{0} \n{1} \n{2} \n{3}" + "\n", fruitArray[0], fruitArray[1], fruitArray[2], fruitArray[3]); 
      string selection = Console.ReadLine(); 


      if (selection == fruitArray[0]) 
      { 
       Console.WriteLine("\nYou have selected {0} ", fruitArray[0]); 
      } 
      else if (selection == fruitArray[1]) 
      { 
       Console.WriteLine("\nYou have selected {0} ", fruitArray[1]); 
      } 
      else if (selection == fruitArray[2]) 
      { 
       Console.WriteLine("\nYou have selected {0} ", fruitArray[2]); 
      } 
      else if (selection == fruitArray[3]) 
      { 
       Console.WriteLine("\nYou have selected {0} ", fruitArray[3]); 
      } 
      else 
      { 
       Console.WriteLine("\nSelection not recognised. Please select fruit: "); 
      } 

     } 

     Console.ReadKey(); 

    } 
    } 
} 
+1

essayer 'foreach (..' avec cette chaîne – RBarryYoung

+2

Quelle serait la condition de sortie ... Si vous ne souhaitez sélectionner plus de fruits? – Mate

+0

avez-vous attaché à taper' onglet for' pression alors? Il devrait vous donne le squelette de la syntaxe correcte – Brad

Répondre

1

C# Pour http://msdn.microsoft.com/en-us/library/ch45axte.aspx

C# foreach http://msdn.microsoft.com/en-us/library/ttw7t8t6.aspx

string[] fruitArray = { "Banana", "Apple", "Orange", "Pineapple" }; 

     Console.WriteLine("Please select your fruit: \n");    
     foreach (string fruit in fruitArray) 
     { 
      Console.Write("\n{0}", fruit); 
     } 

     Console.WriteLine(); 



      string selection = Console.ReadLine(); 
      for (int index = 0; index < fruitArray.Length; index++) 
      { 
       if (fruitArray[index].Equals(selection)) 
       { 
        Console.WriteLine("\nYou have selected {0} ", fruitArray[index]); 
        break; 
       } 
      } 

      foreach (string fruit in new[] {"Banana", "Apple", "Orange", "Pineapple" }) 
      { 
       if (fruit.Equals(selection)) 
       { 
        Console.WriteLine("\nYou have selected {0} ", fruit); 
        break; 
       } 
      } 
2

boucle sans sortie

while (true) 
      { 
       Console.WriteLine("\n", "\n"); 

       string[] fruitArray = { "Banana", "Apple", "Orange", "Pineapple" }; 

       Console.WriteLine("Please select your fruit: \n\n{0} \n{1} \n{2} \n{3}" + "\n", fruitArray[0], fruitArray[1], 
            fruitArray[2], fruitArray[3]); 
       string selection = Console.ReadLine(); 

       switch (selection) 
       { 
        case "Banana": 
         Console.WriteLine("\nYou have selected {0} ", fruitArray[0]); 
         break; 

        case "Apple": 
         Console.WriteLine("\nYou have selected {0} ", fruitArray[1]); 
         break; 

        case "Orange": 
         Console.WriteLine("\nYou have selected {0} ", fruitArray[2]); 
         break; 

        case "Pineapple": 
         Console.WriteLine("\nYou have selected {0} ", fruitArray[3]); 
         break;      
       } 
      }   

Boucle avec condition de sortie

  var isLoop = true; 

      do 
      { 
       Console.WriteLine("\n", "\n"); 

       string[] fruitArray = {"Banana", "Apple", "Orange", "Pineapple"}; 

       Console.WriteLine("Please select your fruit: \n\n{0} \n{1} \n{2} \n{3}" + "\n", fruitArray[0], 
            fruitArray[1], 
            fruitArray[2], fruitArray[3]); 
       string selection = Console.ReadLine(); 


       switch (selection) 
       { 
        case "Banana": 
         Console.WriteLine("\nYou have selected {0} ", fruitArray[0]); 
         break; 

        case "Apple": 
         Console.WriteLine("\nYou have selected {0} ", fruitArray[1]); 
         break; 

        case "Orange": 
         Console.WriteLine("\nYou have selected {0} ", fruitArray[2]); 
         break; 

        case "Pineapple": 
         Console.WriteLine("\nYou have selected {0} ", fruitArray[3]); 
         break; 
        default: 
        isLoop = false; 
        break; 
       } 
      } while (isLoop); 
+0

il est préférable de créer une condition dans l'instruction while jusqu'à ce que l'utilisateur ait fini de sélectionner optionnel fruit –

+1

Je le pense mais la condition pour qu'il décide :) –

+0

Fonctionne bien et fait le travail. Besoin de trouver un moyen de quitter, peut-être Enviornment.Exit()? – wilbomc

1

Pour exemple, cela devrait être suffisant:

string[] fruitArray = { "Banana", "Apple", "Orange", "Pineapple" }; 

Console.WriteLine("Please select your fruit: \n\n{0} \n{1} \n{2} \n{3}" + "\n", fruitArray[0], fruitArray[1], 
           fruitArray[2], fruitArray[3]); 
string selection = Console.ReadLine(); 

Console.WriteLine("\nYou have selected {0} ", selection); 

Probablement je manque quelque chose, je serai heureux de comprendre :)

En outre, vous pouvez simplement améliorer le premier message en itérant le tableau:

Console.WriteLine("Please select your fruit: \n"); 

for(int i=0;i<fruitArray.Length;i++) 
{ 
    Console.WriteLine(fruitArray[i]); 
} 

Espérons que cela aide.

1

Le code suivant doit faire exactement ce que vous voulez. Non seulement cela, mais il simplifie la nécessité d'utiliser même des instructions de bloc if ou un switch, un simple Array.FindIndex est suffisant pour déterminer si l'entrée est valide ou non. En outre, j'ai ajouté une clause de sortie qui permet à l'utilisateur de quitter l'application quand ils sont finis et de supprimer tout encombrement de l'interface utilisateur. J'efface la fenêtre de la console après chaque "itération".

static void Main(string[] args) 
    { 
     var selection = ""; 
     while (selection != "q") 
     { 
      Console.WriteLine(Environment.NewLine); 
      string[] fruitArray = { "Banana", "Apple", "Orange", "Pineapple" }; 

      Console.WriteLine("Please select your fruit (or Q to quit): \n\n{0} \n{1} \n{2} \n{3}", fruitArray[0], fruitArray[1], fruitArray[2], fruitArray[3]); 
      Console.Write(Environment.NewLine + "-> "); 
      selection = Console.ReadLine().ToLower(); 

      // valid option selected 
      var index = Array.FindIndex(fruitArray, (fruit) => fruit.ToLower() == selection); 
      if (index > -1) 
      { 
       Console.Write("\nYou have selected {0}.", fruitArray[index]); 
       ContinuePrompt(); 
      } 
      else if (selection != "q") 
      { 
       Console.Write("\nSelection not recognised."); 
       ContinuePrompt(); 
      } 
     } 
    } 

    static void ContinuePrompt() 
    { 
     Console.Write(" Press any key to continue..."); 
     Console.ReadKey(); 
     Console.Clear(); 
    } 
Questions connexes