3 Stimmen

Verwendung eines booleschen Wertes "das erste Mal" in C++ oder Java

Ich benutze normalerweise ein boolsches 'ersteMal' so:

in C++:

bool ersteMal = true;
for (int i = 0; i < v.size(); i++) {
    if (ersteMal) {
        //etwas nur einmal machen
        ersteMal = false;
    }
    else {
        //das Übliche tun
    }
}

in Java wäre es dasselbe, indem man statt einem bool ein boolean verwendet, daher gebe ich den Code nicht an.

Die Frage ist, gibt es irgendwie in Java oder C/C++ eine Möglichkeit, ein bool/boolean in einer if-Bedingung zu verwenden und automatisch den Wert false zuzuweisen?

Ich weiß, es scheint unsinnig, aber es würde meinen Code VIEL Zeilen sparen, weil ich viele Basisfälle habe und in großen for- oder while-Schleifen ist das kritisch.

Ich möchte wissen, ob es irgendwie möglich ist, einem Wert nach der Verwendung in einer if-Bedingung den Wert false zuzuweisen. Ich weiß, dass wir in einem for oder while einfach verwenden können:

if (i == 0)

Aber ich habe auch an Funktionsaufrufe gedacht, die Dinge wissen müssen und die normalerweise durch bools referenziert werden.

1voto

Jerry Coffin Punkte 452852

Wenn die erste Iteration zusätzlich zur üblichen "Arbeit" nur einige zusätzliche Initialisierungen durchführen soll (anstatt der üblichen Arbeit), würde ich etwas Ähnliches wie folgt in Betracht ziehen:

for (int i=0, do_first_time_stuff(); i

`Eine weitere Möglichkeit wäre folgendes:

Initialization();
std::for_each(v.begin()+1, v.end(), loop_body);`

0voto

Michael Punkte 1239

Ich würde einfach das tun, was du beim ersten Mal außerhalb der for-Schleife versuchen möchtest, und dann den Iterator um eins erhöhen.

if (v.size() > 0) {
    /* Code beim ersten Mal */
}
for (int i = 1; i < v.size(); i++) {
    /* Code beim zweiten Mal oder öfter */
}

Wenn du eine foreach-Schleife benutzt, ist deine Lösung ziemlich solide.

0voto

tdgs Punkte 1016

Warum nicht etwas wie das hier machen:

void firstTime() {
    // Sachen machen
}

void doWork(int i) {
    // Sachen machen
}

firstTime();
for(int i = 1; i

0voto

Akhi Punkte 2244

Wenn Sie den Inhalt der Liste nicht in Ihrer ersten Aktivität verwenden.

if(v.size() >=1 ){
  //do Something for 1 time
}
for (int i = 0; i < v.size(); i++) {
        //do the usual thing
}

Wenn Sie den Inhalt der Liste benötigen, verwenden Sie

if ( i == 0 )
{ 
}

wie von Luchian Grigore vorgeschlagen

0voto

paquetp Punkte 1611

Sie könnten es mit (C++) versuchen:

bool checkFirst(bool& first)
{
  bool result = first;
  first = false;
  return result;
}

bool firstTime=true;
// Schleife hier { 
if (checkFirst(firstTime))
{
  // mache Erstzeit Sachen
} else {
 // mache reguläre Sachen
}
// } // Loop Ende

Java:

public class CheckFirst
{
  private boolean first;

  public CheckFirst()
  {
    first = true;
  }

  boolean check()
  {
    boolean result = first;
    first = false;
    return result;
  }
}

CheckFirst first = new CheckFirst();
// Schleife hier  {
if (first.check()) {
  // mache Erstzeit Sachen
} else {
  // mache reguläre Sachen
}
// } // Loop Ende

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X