2016-07-16 9 views
-2

Ich hatte eine Zuweisung, die mich aufgefordert, eine Array-Größe vom Benutzer anfordern und dann Zahlen anfordern, um das Array zu füllen. Das Programm sollte nur die eindeutigen Zahlen für jede Schleife drucken. Es würde auch den Benutzer benachrichtigen, wenn die eingegebene Nummer ein Duplikat wäre. Ich habe das abgeschlossen und es hat funktioniert wie es soll. Der Lehrer hat dann ein Tutorial-Video veröffentlicht, wie es geschrieben werden könnte/sollte. Dieser Code ist ganz anders als meiner und ich habe versucht, ihn umzuschreiben, um ihre Logik zu verstehen. Ich konnte es nicht zur Arbeit bringen, wie das Tutorial zeigte, und ich verstehe einige der Dinge, die sie enthielt, nicht. Kann sich jemand das ansehen und mir helfen zu verstehen, was es versucht zu tun und ob es wie geschrieben funktioniert?Schwierigkeiten mit dem Kursleiter Tutorial

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

namespace DuplicateHandsOn 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      //create an array of type int 
      int[] aList; 

      //create a counter to keep track of how many numbers have been entered 
      int counter = 0; 

      //create a boolean flag to let us know whether the number can be added or not 
      bool isDuplicate = false; 

      //ask the user how many numbers they will be entering 
      Console.WriteLine("How many numbers will you enter?"); 
      int arraySize = Convert.ToInt32(Console.ReadLine()); 

      //initialize the array with that amount 
      aList = new int[arraySize]; 

      while (counter < arraySize) 
      { 
       //prompt the user for the first number 
       Console.Write("Enter Number: "); 
       int num1 = Convert.ToInt32(Console.ReadLine()); 

       //check if the number is between 10 and 100 
       if (num1 >= 10 || num1 <= 100) 
       { 
        //check if this number exists in the array 
        for (int i = 0; i < aList.Length; i++) 
        { 
         if (aList[i] == num1) 
         { 
          //this number exists in the list 
          Console.WriteLine("{0} has already been entered", aList[i]); 
          isDuplicate = true; 
         } 
        } 

        if (isDuplicate) 
        { 
         //put the number into the array 
         aList[counter] = num1; 
        } 

        //print the array 
        for (int j = 0; j < aList.Length; j++) 
        { 
         //exclude zeros 
         if (aList[j] == 0) 
         { 
          continue; 
         } 
         else 
         { 
          Console.WriteLine(aList[j]); 
         } 
        } 

        //increment the counter 
        counter++; 

        //reset the flag 
        isDuplicate = false; 
       } 
       else 
       { 
        Console.WriteLine("Numbers should be between 10 and 100"); 
       } 
      } 

      #if DEBUG 
      Console.ReadKey(); 
      #endif 

     } 
    } 
} 
+0

Es hat bei mir nicht funktioniert csc.exe C# Compiler in .NET –

Antwort

1

Es gibt drei Fehler im Code, und viele Stilfragen würde ich mit ihm haben, aber die Fehler sind einfach darauf hinweisen. Ich habe // FIX Kommentare hinzugefügt, um zu zeigen, was ich geändert habe, hoffentlich macht es Sinn.

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

namespace DuplicateHandsOn 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      //create an array of type int 
      int[] aList; 

      //create a counter to keep track of how many numbers have been entered 
      int counter = 0; 

      //create a boolean flag to let us know whether the number can be added or not 
      bool isDuplicate = false; 

      //ask the user how many numbers they will be entering 
      Console.WriteLine("How many numbers will you enter?"); 
      int arraySize = Convert.ToInt32(Console.ReadLine()); 

      //initialize the array with that amount 
      aList = new int[arraySize]; 

      while (counter < arraySize) 
      { 
       //prompt the user for the first number 
       Console.Write("Enter Number: "); 
       int num1 = Convert.ToInt32(Console.ReadLine()); 

       // FIX: This should be && instead of || to test if 
       // both of these conditions are true to match 
       // the comment 
       //check if the number is between 10 and 100 
       if (num1 >= 10 && num1 <= 100) 
       { 
        //check if this number exists in the array 
        for (int i = 0; i < aList.Length; i++) 
        { 
         if (aList[i] == num1) 
         { 
          //this number exists in the list 
          Console.WriteLine("{0} has already been entered", aList[i]); 
          isDuplicate = true; 
         } 
        } 

        // FIX: This should only happen if the number 
        // is not a duplicate 
        if (!isDuplicate) 
        { 
         //put the number into the array 
         aList[counter] = num1; 

         // FIX: Move this line into here to only increment 
         // the counter if th enumber is placed in the array 
         //increment the counter 
         counter++; 
        } 

        //print the array 
        for (int j = 0; j < aList.Length; j++) 
        { 
         //exclude zeros 
         if (aList[j] == 0) 
         { 
          continue; 
         } 
         else 
         { 
          Console.WriteLine(aList[j]); 
         } 
        } 

        //reset the flag 
        isDuplicate = false; 
       } 
       else 
       { 
        Console.WriteLine("Numbers should be between 10 and 100"); 
       } 
      } 

#if DEBUG 
      Console.ReadKey(); 
#endif 

     } 
    } 
} 
+0

Du hast mich gerettet gerade aus dieser Antwort schreiben: D Auch würde ich 'anstelle von' aList.Length' für die counter' beide Schleifen. In diesem Fall ist die * Ausschluss Nullen * 'If-Anweisung 'nicht notwendig ... Ich wäre wirklich schockiert, wenn dieser Code von einem C# -Lehrer geschrieben wurde !! –

+0

Ich habe einen Link zu dem Video :). Hier ist auch ein Auszug aus einer E-Mail-Antwort an mich, als ich einige der Materialien befragt und einige der Änderungen erklärt habe, die ich vorgenommen habe. "Es hört sich so an, als würden Sie nur unwichtig Änderungen an der Aussage vornehmen. Es wäre niemals eine AND-Aussage, da wir fragen wollen" ist diese Zahl zwischen 10 und 100? "Wir wissen, dass es eine OR mit zwei Bedingungen sein wird Wenn wir darüber nachdenken, muss die Aussage> 10 sein, da wir keine Zahlen unter 10 wollen. Ebenso müssen wir die obere Grenze von <= 100 setzen, da wir Zahlen bis zu 100 aber nicht darüber haben wollen. " – Mike

+0

Es könnte Zeit sein, eine Rückerstattung zu erhalten. Dieser Ausbilder versteht keine grundlegende boolesche Logik, was nichts Gutes für den Kurs bedeutet. Viel Glück. –

Verwandte Themen