Frage

Ich habe mich gefragt, wie Schleife zu schreiben, do-while-Stil?

Ich fand diesen Beitrag :

Sie verwenden können wiederholen {} und Bedingungen überprüfen wo auch immer zu verwenden, wenn () und beenden Sie die Schleife mit dem „break“ Steuerwort.

Ich bin nicht sicher, was es genau bedeutet. Kann jemand bitte erarbeiten, wenn Sie es verstehen und / oder wenn Sie eine andere Lösung?

War es hilfreich?

Lösung

Pretty selbsterklärend.

repeat{
  statements...
  if(condition){
    break
  }
}

Oder so ähnlich, dass ich denken würde. Um die Wirkung des while-Schleife zu tun, einfach überprüfen für Ihren Zustand am Ende der Gruppe von Anweisungen.

Andere Tipps

Siehe ?Control oder der R Sprache Definition:

> y=0
> while(y <5){ print( y<-y+1) }
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5

So do_while existiert nicht als separates Konstrukt in R, aber Sie können gefälschtes es mit:

repeat( { expressions}; if (! end_cond_expr ) {break} )

Wenn Sie die Hilfeseite sehen wollen Sie nicht ?while oder ?repeat an der Konsole eingeben können, sondern vielmehr auf den Einsatz ?'repeat' oder ?'while' benötigen. Alle „control-Konstrukte“ einschließlich if sind auf der gleichen Seite und alle brauchen Charakter zitiert nach dem „?“ so der Dolmetscher sieht sie nicht als unvollständig Code und gibt Ihnen eine Fortsetzung „+“.

Aufbauend auf den anderen Antworten, wollte ich ein Beispiel für die Verwendung des while-Schleife-Konstrukts teilen ein do-while-Verhalten zu erreichen. Durch eine einfache Boolesche Variable in der while-Bedingung mit (auf TRUE initialisiert), und dann unseren Ist-Zustand später in der if-Anweisung überprüft. Man könnte auch eine Pause Schlüsselwort verwenden, anstatt die weiter <- FALSCH innerhalb der if-Anweisung (wahrscheinlich effizienten).

  df <- data.frame(X=c(), R=c())  
  x <- x0
  continue <- TRUE

  while(continue)
  {
    xi <- (11 * x) %% 16
    df <- rbind(df, data.frame(X=x, R=xi))
    x <- xi

    if(xi == x0)
    {
      continue <- FALSE
    }
  }

zu bemerken, dass Benutzer 42-vollkommenen Ansatz {
* „Tun, während“ = „wiederholen, bis nicht“
* Der Code Äquivalenz:

do while (condition) # in other language
..statements..
endo

repeat{ # in R
  ..statements..
  if(! condition){ break } # Negation is crucial here!
}

} nicht genug Aufmerksamkeit von den anderen erhalten hat, werde ich betonen und vorzuverlegen seinen Ansatz über ein konkretes Beispiel. Wenn man die Bedingung nicht negieren in do-while (via ! oder durch Negation nehmen), dann verzerrt Situationen (1. Wert Persistenz 2. Endlosschleife) sind je nach Verlauf des Codes.

In Gauss:

proc(0)=printvalues(y);
DO WHILE y < 5;    
y+1;
 y=y+1;
ENDO;
ENDP;
printvalues(0); @ run selected code via F4 to get the following @
       1.0000000 
       2.0000000 
       3.0000000 
       4.0000000 
       5.0000000 

R:

printvalues <- function(y) {
repeat {
 y=y+1;
print(y)
if (! (y < 5) ) {break}   # Negation is crucial here!
}
}
printvalues(0)
# [1] 1
# [1] 2
# [1] 3
# [1] 4
# [1] 5

I noch darauf besteht, dass ohne die Negation der Bedingung in do-while, Salcedo Antwort falsch ist. Man kann dies überprüfen über Negation Symbol in dem obigen Code zu entfernen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top