Problem mit Arrayübergabe

G@st

Mitglied
Hallo Leute, das folgende Codestück bereitet mir ziemliche Schwierigkeiten. Es tritt ein Laufzeitfehler auf, den ich mir wirklich nicht erklären kann. Kann auch sein, dass ich gerade voll auf dem Schlauch stehe, aber ich komme einfach nicht drauf, was daran falsch ist, einem Array einen eingelesenen Wert zu übergeben. (Siehe fette Zeile). Habt ihr da ne Idee?

Java:
private void getNumbers() {
		Scanner sc = new Scanner(System.in);
		
		for(int i = 0; i < m_iAnzahlZahlen; i++){
			m_iNumberArray[i] = 0;
		}
		
		
		System.out.println("Wieviele Zahlen wollen sie eingeben?");
		m_iAnzahlZahlen = sc.nextInt();
		
		System.out.println("Geben sie ihre Zahlen ein: ");
		
		for(int i = 0; i < m_iAnzahlZahlen; i++){

			[B]m_iInternAnzahl[i] = sc.nextDouble();[/B]
		}
		
		for( int i = 0; i < m_iInternAnzahl.length; i++){
			m_iNumberArray[i] = m_iInternAnzahl[i];
		}
	
	}

Fehlerbericht:

Exception in thread "main" java.lang.NullPointerException
at blatt3.MaxMinMiddleExtended.getNumbers(MaxMinMiddleExtended.java:42)
at blatt3.MaxMinMiddleExtended.main(MaxMinMiddleExtended.java:17)
 
Code:
m_iInternAnzahl
(übrigens nen schlechter name) ist null. Wo wird das initialisiert?
 
Java:
private void getNumbers() {
		for(int i = 0; i < m_iAnzahlZahlen; i++){

			m_iInternAnzahl[i] = sc.nextDouble();
		}

	}

Hier bekommst du den Fehler.
Was für einen Fehler? Eine NPE, schreib vorher dochmal:
Java:
double[] m_iIntenAnzahl = new double[m_iAnzahlZahlen];
 
Hihi, son schön blöden Fehler hatte ich auch selten^^ Danke für die Tipps, ich habs kurz davor dann auch noch gemerkt und den Fuß vom Schlauch geholt.

Hier der richtige Code:

Java:
	private void getNumbers() {
		Scanner sc = new Scanner(System.in);
		
		
		
		System.out.println("Wieviele Zahlen wollen sie eingeben?");
		m_iAnzahlZahlen = sc.nextInt();

		m_iNumberArray = new double [m_iAnzahlZahlen];
		m_iInternAnzahl = new double [m_iAnzahlZahlen];
		
		for(int i = 0; i < m_iAnzahlZahlen; i++){
			m_iNumberArray[i] = 0;
			m_iInternAnzahl[i] = 0;
		}
		
		System.out.println("Geben sie ihre Zahlen ein: ");
		
		for(int i = 0; i < m_iAnzahlZahlen; i++){

			m_iInternAnzahl[i] = sc.nextDouble();
		}
		
		for( int i = 0; i < m_iInternAnzahl.length; i++){
			m_iNumberArray[i] = m_iInternAnzahl[i];
		}
	
	}
 
Code:
m_iInternAnzahl
(übrigens nen schlechter name) ist null. Wo wird das initialisiert?

Nicht angreifend gemeint, sondern aus Interesse: Warum ist das ein schlechter Name?

m zeigt mir an, dass es sich um eine Membervariable handelt, i sollte zeigen dass es ein int ist^^ -mittlerweile ein double xD - und der Rest gibt mir zu verstehen, was es tut.
 
i sollte zeigen dass es ein int ist^^ -mittlerweile ein double xD
Allein deswegen schon ist der Name murks 😉

Sowohl dass es nen Member ist, als auch dass das nen double[] Array ist kann dir jede IDE anzeigen, die Infos brauchst du nicht im Namen unterbringen.

Außerdem verstößt der Name gegen jede gute code convention 😛
 
> i sollte zeigen dass es ein int ist^^ -mittlerweile ein double xD
Antwort selbst gepostet..
 
Das mit dem m für Instanzvariablen und dem Datentypkürzel am Anfang kenne ich eigtl. nur aus meinen C-Zeiten. Hab ich mir aber abgewöhnt, weil irgendwann die Namen einfch nur noch unschön und unleserlich werden. Habe mir aber angewöhnt, vor jede Instanzvariable ein this anzuhängen, erstens wird das so schön von der IDE hervorgehoben, zweitens vermeidet man damit jegliche Namenskonflikte innerhalb von Methoden und drittens sehe ich gerne, zu welchem Objekt eine Eigenschaft gehört (auch wenn ich keine IDE nutze, weil ich z.B. nur mal schnell im Editor einen Quellcode angeguckt habe (auf´m Handy ´ne IDE mag ich einfach nicht 😀))
 
Ich würde dann eher zu einem Namen wie:
doubleArrInterneAnzahl tendieren, immernoch unschön, aber besser als m_daInterneAnzahl oder m_dArrayInterneAnzahl
 

Neue Themen


Zurück
Oben