Probleme mit Array

Status
Nicht offen für weitere Antworten.

Sur

Mitglied
Hallo,

ich bin noch blutiger Anfänger in JAVA und hab in Sachen Programmierung nur sehr geringe Kenntnisse in PHP und C in der Schule sammeln können.

Momentan arbeite ich gerade folgendes Tutorial durch: Java Grundlagen

Dort gibt es auch kleinere Aufgaben zur Übung. Bei einer Übung habe ich Probleme. Damit ihr nicht die ganze Seite nach der Aufgabenstellung durchsuchen müsst, zitiere ich das mal schnell:
Übung: einfache Kurs-Klasse

Schreiben Sie eine einfache Klasse "Kurs" mit den folgenden Datenfeldern:

* Kurs-Titel (String)
* kostenlos (boolean)
* Namen der Teilnehmer (Array von Strings)
* Anzahl der angemeldeten Teilnehmer

und mit allen benötigten set- und get-Methoden, nach den Konventionen für Beans, sowie einer Methode addTeilnehmer zum Anmelden eines Teilnehmers.

Fügen Sie eine main-Methode an, in der Sie diese Methoden kurz testen, indem Sie zwei oder drei Kurs-Objekte anlegen, ein paar Teilnehmer anmelden und dann die gespeicherten Informationen auf den Bildschirm ausgeben.

Die addTeilnehmer Methode hab ich jetzt mal außenvor gelassen. Ich wollte erst mal sehen, ob die Ausgabe an sich funktioniert

Hier mal mein Code:

Java:
public class Kurs {

	private String Kurstitel;
	private boolean Kostenlos;
	private String[] Name;
	private int Anzahl;

	public void setKurstitel(String newKurstitel) {
		Kurstitel = newKurstitel;
	}

	public String getKurstitel() {
		return Kurstitel;
	}

	public void setKostenlos(boolean newKostenlos) {
		Kostenlos = newKostenlos;
	}

	public boolean getKostenlos() {
		return Kostenlos;
	}

	public void setAnzahl(int newAnzahl) {
		Anzahl = newAnzahl;
	}

	public int getAnzahl() {
		return Anzahl;
	}

	public void setName(String[] newName) {

		int j = getAnzahl();

		for (int i = 0 ; i < j ; i++) {
			Name[i] = newName[i];
		}
	}

	public String[] getName() {
		return Name;
	}

	public void printKurstitel() {
		System.out.println("Name des Kurses: " + Kurstitel);
	}

	public void printKostenlos() {
		boolean k = getKostenlos();

		if ( k == true) {
			System.out.println("Der Kurs ist kostenlos.");
		}
		else {
			System.out.println("Der Kurs ist kostenpflichtig.");
		}
	}

	public void printAnzahl() {
		System.out.println ("Insgesamt nehmen " + Anzahl + " Leute am Kurs teil.");
	}

	public void printName() {
		int j = getAnzahl();

		for (int i = 0 ; i < j ; i++) {
			System.out.println(Name[i]);
		}
	}

	public static void main (String[] args) {
		Kurs Kurs1 = new Kurs();
		Kurs Kurs2 = new Kurs();
		Kurs1.setKurstitel("Schwimmkurs");
		Kurs1.setKostenlos(true);
		Kurs1.setAnzahl(8);
		Kurs1.setName("Andreas", "Albert", "Boris", "Christine", "Doris", "Olga", "Sepp", "Susanne");
		Kurs2.setKurstitel("Tauchkurs");
		Kurs2.setKostenlos(false);
		Kurs2.setAnzahl(4);
		Kurs2.setName("Albert", "Christine", "Doris", "Sepp");

		Kurs1.printKurstitel();
		Kurs1.printKostenlos();
		Kurs1.printAnzahl();
		Kurs1.printName();
		System.out.println("---");
		Kurs2.printKurstitel();
		Kurs2.printKostenlos();
		Kurs2.printAnzahl();
		Kurs2.printName();
	}
}

Beim Kompilieren bekomme ich folgende Fehlermeldung:

C:\Dokumente und Einstellungen\***\Desktop\Kurs.java:78: setName(java.lang.String[]) in Kurs cannot be applied to (java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)
Kurs1.setName("Andreas", "Albert", "Boris", "Christine", "Doris", "Olga", "Sepp", "Susanne");
^
C:\Dokumente und Einstellungen\***\Desktop\Kurs.java:82: setName(java.lang.String[]) in Kurs cannot be applied to (java.lang.String,java.lang.String,java.lang.String,java.lang.String)
Kurs2.setName("Albert", "Christine", "Doris", "Sepp");
^
2 errors

Prozess beendet mit Exit-Code 1

Es muss also etwas mit der Array nicht klappen. Ich habe allerdings keine Ahung, wie ich das sonst machen soll oder wie man das richtig macht.

Ein Ratschlag wäre sehr hilfreich.
 

Painii

Bekanntes Mitglied
Java erwartet ein String[], du übergibts aber viele Strings:
C:\Dokumente und Einstellungen\***\Desktop\Kurs.java:82: setName(java.lang.String[]) in Kurs cannot be applied to (java.lang.String,java.lang.String,java.lang.Strin g,java.lang.String)

Hier mal der Unterschied:
Java:
//deine Methode
String name1="Andreas",name2="Albert";
kurs1.setName(name1,name2);

//richtig
String[] namen = {"Andreas", "Albert", "Boris", "Christine", "Doris", "Olga", "Sepp", "Susanne"}
kurs1.setName(namen);

Dein Aufruf würde dann so aussehen:
Java:
kurs1.setName(new String[]{"Andreas", "Albert", "Boris", "Christine", "Doris", "Olga", "Sepp", "Susanne"});

p.s. Variablen sollten am Anfang klein geschrieben sein, also nicht "Kurs1" sondern "kurs1", und später dann "einKurs", "einAndererKurs"
 

Sur

Mitglied
Danke für deine Hilfe. Das Kompilieren klappt jetzt.

Nur bekomme ich jetzt beim Start der Applikation folgende Ausgabe:

Code:
Exception in thread "main" java.lang.NullPointerException
                at Kurs.setName(Kurs.java:37)
                at Kurs.main(Kurs.java:79)

Anscheinend stimmt irgendetwas nicht in der setName Methode und somit auch nicht in main

Aber mein Code müsste doch richtig sein.

Java:
    public void setName(String[] newName) {
 
        int j = getAnzahl();
 
        for (int i = 0 ; i < j ; i++) {
            Name[i] = newName[i];
        }
    }

Ich hole mir die Anzahl und speicher sie in der Variable j. Dann zähle ich solange hoch, bis i eins kleiner als j ist. Bei einer Anzahl von 12 habe ich 12 Elemente von 0 bis 11.
 

faetzminator

Gesperrter Benutzer
Du holst dir die Anzahl der bereits existierenden Namen, und das ist ein String[] welches null ist. Des weiteren würde auch in deiner for Schleife eine NPE geworfen werden. Warum willst du das Array überhaupt kopieren?
Folgende Lösung wäre korrekt:
Java:
public void setName(String[] newName) {
    Name = new String[newName.length];
    System.arraycopy(newName, 0, Name, 0, newName.length);
}
Abgesehen davon entspricht der Variablenname "Name" nicht den Konventionen.
 

Painii

Bekanntes Mitglied
Dein Code stimmt soweit, allerdings ist wohl Name selbst noch garnicht initialisiert...
Du müsstest das erst machen, da sich bei jeder setName die Größe des Arrays ändert müsste das also wohl in der Methode passieren
Java:
Name = new String[getAnzahl()];
 

Sur

Mitglied
Du holst dir die Anzahl der bereits existierenden Namen, und das ist ein String[] welches null ist. Des weiteren würde auch in deiner for Schleife eine NPE geworfen werden. Warum willst du das Array überhaupt kopieren?
Folgende Lösung wäre korrekt:
Java:
public void setName(String[] newName) {
    Name = new String[newName.length];
    System.arraycopy(newName, 0, Name, 0, newName.length);
}
Abgesehen davon entspricht der Variablenname "Name" nicht den Konventionen.

Ich verstehe nicht genau, was du mit Array kopieren meinst. In der Aufgabenstellung war vorgeschrieben, dass man mit set- und get-Methoden arbeiten soll und die notwendigen Variablen oder Arrays private deklariert.

Dein Code stimmt soweit, allerdings ist wohl Name selbst noch garnicht initialisiert...
Du müsstest das erst machen, da sich bei jeder setName die Größe des Arrays ändert müsste das also wohl in der Methode passieren
Java:
Name = new String[getAnzahl()];

Danke, mit dieser Zeile funktioniert das programm.
 

faetzminator

Gesperrter Benutzer
du weisst was dein Code macht? Er nimmt die einzelnen Elemente des übergebenen Arrays und kopiert sie in das interne. Dies ist gleich wie ein arraycopy() und verhindert Änderungen am internen Array bei späteren Änderungen an dem übergebenen Array. Ist dies nicht von Nöten, genügt ein einfaches...
Java:
public void setName(String[] newName) {
    Name = newName;
}
bzw schöner wäre die lokale Variable "names" mit den jeweiligen Methoden:
Java:
private String[] names;

public void setNames(String... names) {
    this.names = names;
}

public String[] getNames() {
    return names;
}
 

Painii

Bekanntes Mitglied
Java:
System.arraycopy(newName, 0, Name, 0, newName.length);

Macht etwa dasselbe wie deine for-schleife:
Kopiere Array newName von 0 in Array Name ab 0 für newName.length

Sprich danach steht in Name das gleiche wie in newName, da du mit 0 und newName.length ja über das ganze Array iterierst (solange Name genauso groß ist wie newName)
 

Sur

Mitglied
Okay, danke für eure Beiträge. Haben mir sehr geholfen.

Hab jetzt auch die Variablen umbenannt, damit alle mit Kleinbuchstaben anfangen.

Jetzt habe ich allerdings ein Problem mit der addTeilnehmer-Methode.

Ich habe den name Array mit maximal 20 Elemente erstellt, so dass insgesamt 20 Leute teilnehmen können.

Meine Methode schaut so aus:

[Java] public void addTeilnehmer(String newTeilnehmer) {
this.setAnzahl(getAnzahl()+1);
name[getAnzahl()] = newTeilnehmer;
}
[/code]

Unten habe ich dann diese Zeile eingefügt:
Java:
	kurs2.addTeilnehmer("Zacharias");

Das Programm aktuallisiert zwar die Teilnehmerzahl, aber als Name wir null ausgegeben.
 
S

SlaterB

Gast
ganz einfache Gedankengänge:
Anzahl wird auf 1 erhöht,
in name[1] wird der Name geschrieben,
name[0] bleibt bei null,
die Ausgabe gibt später nur name[0] aus, nicht name[1]
 

Sur

Mitglied
Ich kapiere das gerade überhaupt nicht.

Ich habe doch den jeweiligen Elementen den Namen zugewiesen. Jetzt zähle ich eins hoch und will dem neuen Element einen weiteren Namen zuweisen. Wieso sollte dann das vorherige Element null werden?
 

faetzminator

Gesperrter Benutzer
Das erste Element ist name[0], die Grösse ebenfalls 0. In name[0 bis (n-1)] steht jeweils null. wenn du nun die Grösse um eins erhöhst, erhälst du 1. du schreibst danach in name[1] den Namen, also immer ein Element "zu hoch". Wenn du die zwei Linien austauscht, wird es funktionieren:
Java:
name[getAnzahl()] = newTeilnehmer;
setAnzahl(getAnzahl()+1);
 

Sur

Mitglied
Ah, jetzt habe ich es kapiert.

Wenn ich ein neues Array mit 20 Elementen erstelle, dann zählt die Elemente von 0 bis 19 durch. Ich habe nun die ersten vier Elemente belegt, also 0 bis 3. Da aber die Anzahl 4 ist, würde ich den neuen Teilnehmer einen zu hoch zuweisen. Dieser wird auch logischerweise nicht ausgegeben. Stattdessen, wid name[4] asugegeben, der den Wert null hat. Danke für eure Hilfe und Geduld, das Programm läuft jetzt so wie es sollte und ich konnte viel aus diesem Thread lernen.
 

Landei

Top Contributor
Deshalb nimmt auch jeder halbwegs normale Mensch - wenn er eine Wahl hat - für solche sich dynamisch ändernde Datenbestände Klassen wie ArrayList usw. und kein Array, was dafür einfach schlecht geeignet ist.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Splayfer Java Array Probleme Java Basics - Anfänger-Themen 3
J Probleme beim Array ausgeben Java Basics - Anfänger-Themen 4
M Array mit eigenem Datentyp probleme beim übergeben Java Basics - Anfänger-Themen 6
N Probleme bei Speicherung eines Integer-Array in Datei speichern Java Basics - Anfänger-Themen 3
B Probleme beim einlesen einer short variablen für einen Array Java Basics - Anfänger-Themen 1
J Shakersort, das Array macht Probleme! Java Basics - Anfänger-Themen 4
C Erste Schritte Array Werte Ausgeben Probleme mit variable Java Basics - Anfänger-Themen 21
C Probleme beim Array Java Basics - Anfänger-Themen 6
T probleme mit array Java Basics - Anfänger-Themen 4
B Vererbung Probleme bei Array und Vererbung Java Basics - Anfänger-Themen 7
M Datentypen Char Array in String Array gibt Probleme Java Basics - Anfänger-Themen 10
M Collections Probleme bei Zugriff auf Array Java Basics - Anfänger-Themen 19
T Anfänger hat Probleme mit Array einlesen ;) Java Basics - Anfänger-Themen 13
L 5 Gewinnt Array[][] probleme Java Basics - Anfänger-Themen 20
F Probleme mit Array bzw. ArrayList Java Basics - Anfänger-Themen 26
D Probleme mit Array Java Basics - Anfänger-Themen 8
L Probleme mit Array Java Basics - Anfänger-Themen 8
J Probleme mit setIcon bei Button-Array Java Basics - Anfänger-Themen 4
H String Array Probleme Java Basics - Anfänger-Themen 10
D "Ueber"-Klasse? / Label Array Probleme Java Basics - Anfänger-Themen 2
M probleme mit array (als attribut einer klasse) Java Basics - Anfänger-Themen 2
M Probleme mit Array's Java Basics - Anfänger-Themen 6
R probleme mit array Java Basics - Anfänger-Themen 17
megachucky probleme mit einem char-array. Java Basics - Anfänger-Themen 6
A Probleme bei Ausgabe (array) Java Basics - Anfänger-Themen 2
C Probleme mit Array Java Basics - Anfänger-Themen 2
N Große Probleme mit StingBuffer und Array Java Basics - Anfänger-Themen 2
D Probleme bei Verwendung short und int im Constuctor Java Basics - Anfänger-Themen 6
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
C Probleme mit Byte konvertieren nach int Java Basics - Anfänger-Themen 10
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
I Projekte in IDE untereinander sharen / Probleme beim Build Java Basics - Anfänger-Themen 8
MiMa Probleme mit Datentyp long ?? Java Basics - Anfänger-Themen 2
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
Jxhnny.lpz TicTacToe Spiel vs Computer. (Probleme) Java Basics - Anfänger-Themen 7
B Quiz mit RMI Probleme mit RMI start Java Basics - Anfänger-Themen 4
httprt Probleme bei dem erstellen von leveln in meinem Spiel Java Basics - Anfänger-Themen 2
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
V Probleme Guessing Game Java Basics - Anfänger-Themen 8
hebein PDF Ausdruck auf Drucker - Probleme mit Format Java Basics - Anfänger-Themen 17
R JMenu/JMenuItem Probleme Java Basics - Anfänger-Themen 2
B Static vs non static und Probleme daraus Java Basics - Anfänger-Themen 13
J Probleme mit dem Debugger Java Basics - Anfänger-Themen 4
I Probleme mit OutputStream - Datei lässt sich nicht öffnen Java Basics - Anfänger-Themen 4
J Probleme mit Kompilierung Java Basics - Anfänger-Themen 11
B Probleme mit Zugriff auf Dateisystem Windows 10 ( jFileChooser) Java Basics - Anfänger-Themen 17
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
C Probleme mit paintComponent Java Basics - Anfänger-Themen 13
P Probleme mit JUnit-Tests, es kommt was anderes raus als bei manuellen Tests Java Basics - Anfänger-Themen 5
E JavaFX Editor Probleme mit der Zwischenablage Java Basics - Anfänger-Themen 12
C Probleme mit dem Erstellen und Importieren von Packages Java Basics - Anfänger-Themen 6
3 OOP erste Versuche, OOP zu verstehen. Probleme mit gettern und settern Java Basics - Anfänger-Themen 4
R Erste Schritte Probleme bei 2D Spielfeld, mit einzufügender "Person" Java Basics - Anfänger-Themen 5
P Probleme bei der Installation von JavaFX Java Basics - Anfänger-Themen 3
S Mehrere Probleme im Code Java Basics - Anfänger-Themen 7
D Probleme mit JFrame und der Größe Java Basics - Anfänger-Themen 8
Dimax String Probleme Java Basics - Anfänger-Themen 12
N Probleme beim printen von Arrays durch for Schleife Java Basics - Anfänger-Themen 3
J Probleme bei IllegalArgumentException "werfen". Java Basics - Anfänger-Themen 1
K Probleme bei der Ausgabe - komme nicht weiter :/ Java Basics - Anfänger-Themen 15
X Probleme im Umgang mit PriorityQueue Java Basics - Anfänger-Themen 75
D Probleme mit dem Windowbuilder und JComboBox Java Basics - Anfänger-Themen 2
M Regex Probleme (mal wieder) Java Basics - Anfänger-Themen 3
tom.j85 TicTacToe - probleme beim Casten Java Basics - Anfänger-Themen 6
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
X Probleme mit Übungsaufgaben zu Zahlentypen Java Basics - Anfänger-Themen 4
G Probleme bei Aufgabe Java Basics - Anfänger-Themen 12
P Erste Schritte Probleme mit dem Programmieren Java Basics - Anfänger-Themen 12
B Probleme bei einer Aufgabe Java Basics - Anfänger-Themen 19
Franzi1001 Probleme mit Eclipse Java Basics - Anfänger-Themen 7
T Probleme bei Installation von JDK Java Basics - Anfänger-Themen 2
C Probleme mit String-Vergleich Java Basics - Anfänger-Themen 4
C Probleme bei Regex Java Basics - Anfänger-Themen 9
V Probleme mit Arrays Java Basics - Anfänger-Themen 8
D Kleine Probleme mit Split-Befehlen Java Basics - Anfänger-Themen 5
T Probleme mit Strings Java Basics - Anfänger-Themen 6
G Probleme bei Frame aufgaben Java Basics - Anfänger-Themen 6
N Probleme mit dem ActionListener Java Basics - Anfänger-Themen 4
D Probleme beim Kompelieren mache ich etwas falsch ? Java Basics - Anfänger-Themen 3
L Probleme mit Java Java Basics - Anfänger-Themen 3
S Probleme mit abspielen einer .wav Datei Java Basics - Anfänger-Themen 2
J Probleme bei der Umwandlung einer Farbe von Hex zu RGB Java Basics - Anfänger-Themen 8
K Probleme beim Programm schreiben - Lesen von Dateiinhalten -zaehlen von Wörtern/ Buchstaben Java Basics - Anfänger-Themen 4
M Probleme beim aktualisieren eines JPanels Java Basics - Anfänger-Themen 7
M Probleme bei rekursiver Zuordnung Java Basics - Anfänger-Themen 1
I Probleme mit 2 dimensionale Arrays Java Basics - Anfänger-Themen 3
H Best Practice View probleme Java Basics - Anfänger-Themen 2
B Probleme mit Kreisberechnung Java Basics - Anfänger-Themen 15
E Probleme mit Scanner Java Basics - Anfänger-Themen 4
J Eclipse Export Probleme Java Basics - Anfänger-Themen 25
M Probleme beim verwenden von Packages Java Basics - Anfänger-Themen 6
D Probleme mit der Übergabe einer BorderPane Java Basics - Anfänger-Themen 2
J Interface Probleme bei der Implementierung Java Basics - Anfänger-Themen 1
BlueFox Tabelle in der Konsole ausgeben - Probleme Java Basics - Anfänger-Themen 1
G Methoden Probleme beim Methodenaufruf Java Basics - Anfänger-Themen 2
V Klassen ObjectInputStream ->ReadObject Probleme Java Basics - Anfänger-Themen 5
P Probleme mit der Do-Schleife Java Basics - Anfänger-Themen 2
F Erste Schritte Compiling Probleme Java Basics - Anfänger-Themen 13
S Neuling und Probleme bei Schulaufgabe Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben