2016-03-28 2 views
0

Wie ist das möglich? Ich habe nicht ein neues Array ... noch m (0) hat einen Wert von 10. AND, m (1) ist eine ArrayIndexOutOfBounds Ausnahme ...Scala Array-Deklaration - nicht intuitives Ergebnis für anwenden (0)

enter image description here

+0

Um ein Array der Größe 10 zu erstellen, das auf den Standardwert initialisiert wurde ('0' /' false'/'\ 0' für Primitive,' null' für Objekte), wollen Sie 'Array.ofDim [Int] (10) '. –

Antwort

0
erstellt

Array[Int](10) erstellt ein Array mit einer Element, 10. Überprüfen Sie es here

Dennoch sollten Sie in Scala nicht direkt auf Array-Elemente zugreifen, ohne Ausnahmen zu beachten. Ich würde es vorziehen, so etwas wie:

scala> val array = Array(10) 
array: Array[Int] = Array(10) 

scala> array.drop(5).headOption 
res0: Option[Int] = None 

für das fünfte Element zuzugreifen Instanz

+1

* In Scala (und jeder anderen FP-Sprache) sollten Sie nicht direkt auf Array-Elemente zugreifen. * Warum sollten Sie nicht direkt auf Array-Elemente zugreifen? –

+0

Außerdem, um sicher zu sein, können Sie nur 'array.lift (4)' auf das fünfte Element zugreifen. Ihr Code greift auf den 6. zu, da die ersten 5 gelöscht werden. –

+0

Ja, mein Tippfehler beim Zugriff auf die 6. aber ich war mir des '.lift' nicht bewusst, danke :) – pedrorijo91

1

val m = Array[Int](10) bedeutet ein Array vom Typ Int mit einem Elemente 10 die Variable m gebunden. m(n) bedeutet das n-te Element von m.

Das ist warum m(1) gibt Ihnen ein ArrayIndexOutOfBounds, m hat nur ein Element.

Mischen Sie es mit der ungeraden Java-Syntax für Arrays? int[] m = new int[10]; Welches ist ein Array mit 10 nicht initialisierten Elementen.

+0

Nein, ich folgte einfach einem Kurs ... also ich vermischte es nicht. Nun, hier ist der Haken, wenn das Wort new vor dem Array hinzugefügt wird, DANN, bekomme ich den gewünschten Effekt, den das Kursziel hatte, nämlich ein Array mit 10 Elementen zu deklarieren, die auf Null initialisiert sind. Scala ist komisch. – Beezer

+0

Das liegt daran, dass 'Array (10)' alleine die Methode 'Array.apply' im Array-Objekt aufruft: http://www.scala-lang.org/api/current/#scala.Array$ und' neues Array verwenden (10) 'ruft den Konstruktor in der Klasse Array auf: http://www.scala-lang.org/api/current/#scala.Array – pedrofurla

+0

Aber um ehrlich zu sein, habe ich nicht viele Verwendungen von' new Array' herum . In der Tat hatte sogar vergessen es existiert. – pedrofurla

Verwandte Themen