[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 22

 

Leute, helft mir!

                      if(OPrazH<razH && OPrazH>0)              
                        {
                         f1=1;                                 
                         xDelH[countDH][0]=High[j];            
                         xDelH[countDH][1]=Time[j];
                         Print(xDelH[countDH][0]);
                         countDH++;
                         break;
                        }

Ich schreibe diesen Code (dies ist ein Schnipsel), alle Variablen und Arrays sind gesetzt, der Zähler zählt. Anfänglich countDH=0. Aber es gibt ein Problem: Es wird nichts in das Array xDelH geschrieben. Print (High[j], Time[j], countDH) liefert das richtige Ergebnis, aber xDelH[countDH][0] ergibt immer 0. Die Überprüfung über die Array-Größe liefert ebenfalls 0.

Selbst wenn man xDelH[countDH][0]=0.01 schreibt, erhält man immer noch 0. Egal, was ich tue, egal, wo ich diesen Code einfüge, er funktioniert nicht.

Woran mag das liegen? Was ist der Grund dafür? Bitte helfen Sie mir!

 
WindSW:

Leute, helft mir!

Ich schreibe diesen Code (dies ist ein Fragment), alle Variablen und Arrays sind gesetzt, Zähler zählt. Aber ich habe ein Problem mit xDelH Array, nichts wird in sie geschrieben. Print (High[j], Time[j], countDH) liefert das richtige Ergebnis, aber xDelH[countDH][0] liefert immer 0. Die Überprüfung über die Array-Größe liefert ebenfalls 0. Woran kann das liegen? Was ist der Grund dafür? Bitte helfen Sie mir!

Selbst wenn ich xDelH[countDH][0]=0,01 schreibe, ergibt das immer noch 0.

Prüfen, ob xDelH vom Typ double ist. Ist das wenn drin für. Der Break-Operator ist irgendwie falsch platziert. Was wird passieren, wenn Sie es wie unten beschrieben machen?

double xDelH [1][1];
int countDH=0;

xDelH[countDH][0]=0.01; // точка а не запятая
Print(DoubleToStr(xDelH[countDH][0],2));
 
WindSW:

Leute, helft mir!

Ich schreibe diesen Code (dies ist ein Auszug), alle Variablen und Arrays sind gesetzt, der Zähler zählt. Anfänglich countDH=0. Aber es gibt ein Problem: Es wird nichts in das Array xDelH geschrieben. Print (High[j], Time[j], countDH) liefert korrekte Ergebnisse, während xDelH[countDH][0] immer 0 ergibt. Die Überprüfung über die Array-Größe liefert ebenfalls 0.

Selbst wenn man xDelH[countDH][0]=0.01 schreibt, erhält man immer noch 0. Egal, was ich tue, egal, wo ich diesen Code einfüge, er funktioniert nicht.

Woran mag das liegen? Was ist der Grund dafür? Bitte helfen Sie mir!

Ein weiterer Grund kann die nicht deklarierte Größe des Arrays xDelH[][] sein.
 
Ich habe double xDelH[][2]; if ist in zwei for, von denen einer durch j geht. Der von Ihnen geschriebene Code funktioniert - er ergibt 0,01
 
WindSW:
Ich habe double xDelH[][2]; if ist in zwei for, von denen einer durch j geht. Der von Ihnen geschriebene Code funktioniert - er gibt 0,01

In Ihrer Version ist die Größe des Arrays in Dimension 0 nicht angegeben, im obigen Beispiel jedoch schon:

double xDelH [1][1];
 

Ich danke Ihnen! Es funktioniert alles. Wählen Sie die Größe wie folgt: ArrayResize(xDelH,100);

Eine weitere Frage: wenn das Array alle 100 Zellen füllt, und countDH wird bis 120 zum Beispiel zählen, wird die Array-Größe automatisch auf 120 erhöhen, oder muss ich regelmäßig die Größe des Arrays eine andere Weise?

 
WindSW:

Ich danke Ihnen! Es funktioniert alles. Wählen Sie die Größe wie folgt: ArrayResize(xDelH,100);

Eine weitere Frage: Wenn das Array alle 100 Zellen füllt und countDH zum Beispiel bis 120 zählt, wird die Größe des Arrays automatisch auf 120 erhöht, oder muss ich die Größe des Arrays regelmäßig auf eine andere Weise ändern?

Nichts wird automatisch erledigt. Falls erforderlich:

ArrayResize (xDelH, countDH + 1);
 
TarasBY:

Nichts wird automatisch erledigt. Falls erforderlich:


Ich danke Ihnen!
 

Alternativ können Sie auch mehrere Zellen auf einmal setzen, z. B. 1000, wenn Sie wissen, dass es nicht mehr als 1000 sein werden. Wenn Sie das Array innerhalb von for füllen, dann definieren Sie im selben for die maximale Anzahl der Iterationen und vor for können Sie die Größe des Arrays ändern, z.B...:

double xDelH[][2];

int N=120;
ArrayResize(xDelH, N);

for (int i=0; i<=N; i++)
{
// ...
}
 
paladin80:

Alternativ können Sie auch mehrere Zellen auf einmal setzen, z. B. 1000, wenn Sie wissen, dass es nicht mehr als 1000 sein werden. Wenn Sie das Array innerhalb von for füllen, dann definieren Sie in demselben for die maximale Anzahl von Iterationen und vor for können Sie die Größe des Arrays ändern, zum Beispiel..:


In meinem Code, ist es bequemer, die Anzahl der Iterationen durch ArrayRange zu definieren.

Wenn ich xDelH[countDH][0]=HBar[countH][0]; schreibe, ergibt das 0 (obwohl HBar[countH][0] bereits gefüllt ist und seinen eigenen Wert hat). Kann ich das überhaupt tun?

Grund der Beschwerde: