2016-04-04 12 views
0

Vielen Dank für das Betrachten dieser Seite. Ich bin neu in C# und ich würde gerne wissen, warum dieses Stück Code die Werte erhöht. Im Wesentlichen versuche ich die Geschwindigkeit einzelner Partikel in einem System zu messen, jedoch zeigen die Ergebnisse aus der Textdatei, dass jeder Wert der Geschwindigkeit zum nächsten addiert. Was ich brauche, ist eine Zählung jedes Wertes für die Geschwindigkeit in einen Behälter einzugeben, z. B. eine Zählung von 1 für Geschwindigkeiten zwischen 0 und 0,5 geht in Behälter 1 und 0,5 bis 1,0 in Behälter 2 und so weiter, also dann die Werte von jedem Bin kann in eine Textdatei geschrieben werden, die ich dann in ein Histogramm umwandeln kann, um zu sehen, wie oft jede Geschwindigkeit in einem bestimmten Bin auftritt. Mein Code ist unten. Ich bin sehr dankbar für jede Hilfe, die mir gegeben wird. Danke, dass Sie die Seite angesehen haben. Warum wird dieses Codeteil erhöht? C#

private void computeVelocity() 
    { 
     //calc velocity of each particle for printing 
     double binSize = 0.5; 
     double velocityOfParticle = 0.0; 
     double averageSquareVelocity = 0.0; 
     int maxArrayValue = 0; 
     int binArraySize = 0; 
     int z; 
     double[] velocityArray = new double[Particle.allParticles.Count]; 

     for (int counter = 0; counter < Particle.allParticles.Count; counter++) 
     { 
      averageSquareVelocity = Particle.allParticles[counter].SquareVelocity; 
      velocityOfParticle = Math.Sqrt(averageSquareVelocity); 
      velocityArray[counter] = velocityOfParticle; 
     } 
     maxArrayValue = Convert.ToInt32(Math.Round(velocityArray.Max())); 
     binArraySize = Convert.ToInt32(Math.Round(maxArrayValue/binSize)); 
     //numberOfBins = Math.Round(maxArrayValue/binSize); 
     int [] binCountArray = new int[numberOfParticles]; 
     int incrementTerm = 0; 
     Array.Clear(binCountArray, 0, binCountArray.Length); 
     for(double counter = 0.0; counter <= maxArrayValue; counter = counter + binSize) 
     { 
      if(counter > binSize) 
      { 
       incrementTerm = incrementTerm + 1; 
      } 
      z = 0; 
      for(int i = 0; i < numberOfParticles; i++) 
      { 
       if(velocityArray[i] <= counter) 
       { 
        z++; 
       }     
      }  
      binCountArray[incrementTerm] = z; 
     } 
     foreach (var item in binCountArray) 
     { 
      VelocityValues.WriteLine(item); 
     } 
     } 
+0

Wegen der Math.Round-Syntax. –

+0

Was ist das Problem? Dein Titel sagt, dass er sich inkrementiert, und deine Beschreibung beschreibt, wie du die Anzahl der Bins erhöhen willst, um die Häufigkeit jeder Geschwindigkeitsgruppe zu zählen. Es gibt keine Problemdefinition hier. – Ian

Antwort

0
if(velocityArray[i] <= counter) 

wird dies alles unter Zähler hinzuzufügen, statt unter Zähler und über Gegen binSize. Korrigiert (wahrscheinlich):

private void computeVelocity() 
    { 
     //calc velocity of each particle for printing 
     double binSize = 0.5; 
     double velocityOfParticle = 0.0; 
     double averageSquareVelocity = 0.0; 
     int maxArrayValue = 0; 
     int binArraySize = 0; 
     int z; 
     double[] velocityArray = new double[Particle.allParticles.Count]; 

     for (int counter = 0; counter < Particle.allParticles.Count; counter++) 
     { 
      averageSquareVelocity = Particle.allParticles[counter].SquareVelocity; 
      velocityOfParticle = Math.Sqrt(averageSquareVelocity); 
      velocityArray[counter] = velocityOfParticle; 
     } 
     maxArrayValue = Convert.ToInt32(Math.Round(velocityArray.Max())); 
     binArraySize = Convert.ToInt32(Math.Round(maxArrayValue/binSize)); 
     //numberOfBins = Math.Round(maxArrayValue/binSize); 
     int [] binCountArray = new int[numberOfParticles]; 
     int incrementTerm = 0; 
     Array.Clear(binCountArray, 0, binCountArray.Length); 
     for(double counter = 0.0; counter <= maxArrayValue; counter = counter + binSize) 
     { 
      if(counter > binSize) 
      { 
       incrementTerm = incrementTerm + 1; 
      } 
      z = 0; 
      for(int i = 0; i < numberOfParticles; i++) 
      { 
       if((velocityArray[i] <= counter) && (velocityArray[i] > counter - binSize)) 
       { 
        z++; 
       }     
      }  
      binCountArray[incrementTerm] = z; 
     } 
     foreach (var item in binCountArray) 
     { 
      VelocityValues.WriteLine(item); 
     } 
     }