Ich bin hypnotisiert. Der folgende Code gibt mir einen Indexoutofbound-Fehler. Aber wenn ich die Schrägstriche löschen würde, die for(j <- i until tmpArray.length)
ermöglichen, würde es funktionieren. Ich verstehe wirklich nicht, warum das passiert, und würde mich über eine Erklärung freuen.ObservableBuffer geben IndexOutOfBounds in Scala
Antwort
Sie ändern das Array, während Sie darüber "iterieren".
Sie durchlaufen tatsächlich den Bereich 0 until tmpArray.length
, der im Voraus berechnet wird. Irgendwann reduzierst du die Länge des Arrays (oder ich nehme an, dass ich remove
auf der Array
Klasse nicht finden kann). Aber es wird weiterhin die Iteration bis zu dem letzten Index fortsetzen, als Sie den Bereich erstellt haben.
Wenn Sie den inneren for
Block auskommentieren, wird der Bereich für jeden Schritt des äußeren for
erneut berechnet. Und es passiert einfach, dass die Palette einfach nichts hat, wenn i >= tmpArray.length
. Es schützt also unabsichtlich vor diesem Versagen.
Dies ist sehr C-style (Imperativ) -Code. Es sieht so aus, als würden Sie nur versuchen, einige Elemente aus einem Array zu entfernen. Das ist, was filter
ist für.
val result = tmpArray.filter { d =>
if(date.getValue != null && d != date.getValue) false else true
}
Dies schafft einen neuen array (result
) von einer anonymen Funktion tmpArray.filter
geben. Es übergibt jedes Element im Array an Ihr "Prädikat", und wenn es true
zurückgibt, behält es das Element in result
, andernfalls wird es es weglassen.
Sie sollten beachten, dass ich vermieden habe, "Schleife" zu sagen. Scala for
ist nicht für die Herstellung von Schleifen. Es ist eigentlich Syntax Zucker zum Aufrufen von Methoden wie foreach
und map
. Google "scala for comprehensions" für mehr Details.
Wenn Sie darauf bestehen, eine C-style-Schleife zu erstellen, die Indizes und eine Schleifenvariable verwendet, sollten Sie while
verwenden, so dass Sie jedes Mal überprüfen können, ob i < tmpArray.length
ist.
Danke! Hat viel geholfen. Ich bin C gewohnt, ich habe letzten Monat mit Scala angefangen. –
- 1. ANOTHER IndexOutOfBounds Ausnahme
- 2. Java IndexOutOfBounds Exception
- 3. Java seltsam unerwartet IndexOutOfBounds
- 4. OBJ Loader IndexOutOfBounds
- 5. IndexOutofBounds Ausnahme erstellen ein Labyrinth
- 6. Tabellenspalte Alias geben, ohne „(und ")" in scala
- 7. Geben Sie in Scala generischen Typparameter
- 8. So geben Sie None in Scala zurück
- 9. IndexOutofBounds bei Verwendung von Javas gelesenen Bytes
- 10. Kann dieser IndexOutOfBounds-Fehler nicht ausgegeben werden?
- 11. Scala Generika, geben Sie generische durch variable
- 12. Selen WebDriver - Fehlende ‚text‘ Parameter (IndexOutOfBounds) - Tastaturbefehle
- 13. 2D-Arraylist in spiralförmiger Reihenfolge drucken indexOutOfBounds Exception
- 14. Geben Sie die Gleichheit in der Scala 2.10 Reflection API
- 15. geben doppelte Werte eindeutige Kennungen in Spark/Scala
- 16. Geben Sie ein verschachteltes Objekt in scala Spiel json
- 17. Warum Scala Rückkehr in for-Schleife Einheit Wert Typ geben?
- 18. In Scala, wie würde ich einem Singleton einen Konstruktor geben?
- 19. Wie man hdfs Pfad in Apache Tika mit Scala geben?
- 20. Scala rekursiv beschränkten Typ Parameter (F-begrenzt) Umwandlung geben Mitglied
- 21. Scala abgeleiteten Typ Argumente - Geben Sie Grenzen auf "Nothing"
- 22. Android - EditText gibt IndexOutOfBounds Ausnahme bei der Verwendung von textAllCaps
- 23. Android - Benutzerdefinierter ListView Adapter - Mehrfachauswahl entfernen - Indexoutofbounds - warum?
- 24. Scala AST in Scala
- 25. in Scala
- 26. Bitfelder in Scala
- 27. Ausnahmebehandlung in Scala Funktionsprogrammierung
- 28. Sequenzierungssammlungen in Scala
- 29. Anfänger: Scala-Typ Alias in Scala 2.10?
- 30. Wie man zufällige Werte von 2-D-Array in Scala geben?
warum versuchst du 'ArrayBuffer' anstelle von' ObservableBuffer'? –