Probleme beim adden von Elementen in einer ArrayList

Status
Nicht offen für weitere Antworten.

icarus2

Top Contributor
Huhu

Ich möchte im moment gerade gerne ein Spiel programmieren. Um die Koordinaten der Schife zu speichern möchte ich eine ArrayList nutzen.

Doch irgendwie funktioniert das adden von Elementen in der ArrayList. Ich weiss aber nicht warum, die Länge bleibt einfach immmer 0.

Die ArrayList:
[Java]
private ArrayList<Integer> xCoordinates = new ArrayList<Integer>();
private ArrayList<Integer> yCoordinates = new ArrayList<Integer>();

[/Java]

Anschliessend habe habe ich eine Methode, in der neue Elemente geaddet werden sollen:

[Java]
@Override
public void createNewObject(){

xCoordinates.add(calculateXCoordinatesNewShip());
yCoordinates.add(calculateYCoordinatesNewShip());
currentStructure.add(currentStructure.size(),initialStructure);

}

[/Java]

Doch wie gesagt, es funktioniert nicht. Die Länge bleibt anschliessend immer 0.

Btw... die Methoden, die als Parameter übergeben werden bei add() sehen beide so aus:

[Java]
protected int calculateYCoordinatesNewShip(){
return (int)(Math.random()*500-50);
}
[/Java]

Ich habe überhaupt keine Ahnung woran das liegt... kann mir da jmd helfen. Oder soll ich mal etwas mehr Code reinstellen?
 

Ark

Top Contributor
Ich denke, das Problem ist nur aus Sicht eines größeren Kontextes erkennbar. Wir brauchen also mehr Code drumherum, vor allem die Stellen, wo die Objekte zu leben beginnen und wo die Größe der Listen abgefragt wird.

Ark
 

Schandro

Top Contributor
Poste mal ein KSKB oder bau bei dir ein paar sysout's zum debuggen ein (oder benutz nem Debugger).

Ansonsten, wenn ich dir nen Tipp geben darf: Du solltest die x- und y-Koordinate niemals getrennt behandeln. Mach eine "Container"-Klasse, wo du die x-und y-Koordinate gleichzeitig drin speichern kannst. Dann brauchst du nur eine ArrayList, die diese "Punkte" aufnimmt. (du könntest auch die bereits vorhandene Klasse Point benutzen).
Aufjedenfall sollte man zusammengehörige und komplett voneinander abhängige Werte nicht trennen.
 
Zuletzt bearbeitet:

icarus2

Top Contributor
Danke schon mal. Ich werde es dann mal mit der Klasse Point versuchen.

Also, ich habe eine Basisklasse Alien, die ein par Methoden zur Verfügung stellt, die alle Alientypen brauchen.

Die Klasse sieht so aus:
[Java]
package aliens;

import java.awt.*;
import java.util.*;

public class Aliens {


/**
* Calculates randomly in which direction an object moves.
*
* @param currentPosition
* @return if it moves upwards it returns a positive, if downwards a negative number.
*/

private static int calculateMovingDirection(int currentPosition){

int randomDirection = (int)(Math.random()*100+1);

if(randomDirection <= 50){
return -1;
}
else{
return 1;
}
}

protected void setNewXCoordinates(ArrayList<Integer> coordinate, int speedX){
for(int i = 0; i < coordinate.size(); i++){

if(calculateMovingDirection(0) > 0){

int position = coordinate.get(i) - speedX;

coordinate.remove(i);
coordinate.add(i, position);
}
else{
int position = coordinate.get(i) + speedX;

coordinate.remove(i);
coordinate.add(i, position);
}

}
}


protected ArrayList setNewYCoordinates(ArrayList<Integer> coordinate, int speedY){


for(int i = 0; i <= coordinate.size(); i++){

if(calculateMovingDirection(0) > 0){

int position = coordinate.get(i) - speedY;

coordinate.remove(i);
coordinate.add(i, position);
}
else{
int position = coordinate.get(i) + speedY;

coordinate.remove(i);
coordinate.add(i, position);
}

}

return coordinate;
}

/*
protected void setNewYCoordinates(ArrayList<Integer> coordinate, int speedY){

//System.out.println("setNewYCoordinates called");

for(int i = 0; i < coordinate.size(); i++){

if(calculateMovingDirection(0) > 0){

int position = coordinate.get(i) - speedY;

coordinate.remove(i);
coordinate.add(i, position);
}
else{
int position = coordinate.get(i) + speedY;

coordinate.remove(i);
coordinate.add(i, position);
}

}
}

*/

/**
* Calculates randomly if a ship is going to shoot or not
* @return true if it shoots, false if it does not
*/
protected static boolean shipShoots(){

int randomShoot = (int)(Math.random()*100+1);

if(randomShoot == 10 || randomShoot == 50 || randomShoot == 40){
return true;
}
else{
return false;
}
}

/**
* Calculates randomly if a new ship is created or not
*
* @param currentAmountOfShips, the current amount of ships in the space
* @return true if a new ship is created, else false
*/
protected static boolean shipGoingToBeCreated(int currentAmountOfShips){

boolean status;

if(currentAmountOfShips <= 2){
status = true;
}
else if(currentAmountOfShips >= 10){
status = false;
}
else{

int randomShip = (int)(Math.random()*50+1);

if(randomShip == 5 || randomShip == 10){
status = true;
}
else{
status = false;
}
}
return status;
}

protected int calculateXCoordinatesNewShip(){
return 800;
}

protected int calculateYCoordinatesNewShip(){
return (int)(Math.random()*500-50);
}

/**
* Method to paint the ships of a class that inherits this method
*
* @param xCoordinates, ArrayList in which the coordinates are stored
* @param yCoordinates, ArrayList in which the coordinates are stored
* @param g, The Graphics object
* @param c, The Color of the Ship
* @param width
* @param height
*/
protected static void paintShips(ArrayList<Integer> xCoordinates,
ArrayList<Integer> yCoordinates,
Graphics g, Color c,
int width, int height){
for(int i = 0; i < xCoordinates.size(); i++){
g.fillRect(xCoordinates.get(i), yCoordinates.get(i), width, height);
}

}



}
[/Java]

Ausserdem ist da noch die erste Alientyp-Klassen Trins. Das soll das erste Alien sein.
[Java]
package aliens;

import java.awt.Color;
import java.awt.Graphics;
import java.util.*;
import tools.*;

public class Trins
extends Aliens
implements Updatable, Createable, Destroyable, Movable{


private final static int initialStructure = 50;
private final static int speedX = 5;
private final static int speedY = 2;
private static int currentAmountOfShips = 0;
private final static int shipDimension = 100;
private final static Color shipColor = Color.red;
//private final static int shotPower = 10;

//Attributes which store values during the game in Lists
private ArrayList<Integer> xCoordinates = new ArrayList<Integer>();
private ArrayList<Integer> yCoordinates = new ArrayList<Integer>();
private ArrayList<Integer> currentStructure = new ArrayList<Integer>();

//done: Updatable, Creatable, Movable
//missing: Destroyable
@Override
public void updateObjects(){

if(super.shipGoingToBeCreated(currentAmountOfShips)){
createNewObject();
currentAmountOfShips++;
}


setNewXCoordinates(xCoordinates, speedX);
setNewYCoordinates(yCoordinates, speedY);


}

@Override
public void createNewObject(){

xCoordinates.add(calculateXCoordinatesNewShip());
yCoordinates.add(calculateYCoordinatesNewShip());

}


@Override
public int getStructure(int shipNumber) {
return currentStructure.get(shipNumber);
}


@Override
public void removeDestroyedObject(int shipNumber) {
xCoordinates.remove(shipNumber);
yCoordinates.remove(shipNumber);
currentStructure.remove(shipNumber);
}


@Override
public void setDamage(int shipNumber, int damage) {

int newStructure = currentStructure.get(shipNumber)-damage;

currentStructure.set(shipNumber, newStructure);
}


@Override
public int getSpeed(int shipNumber) {
return 5;
}


@Override
public int getXCoordinate(int shipNumber) {
return xCoordinates.get(shipNumber);
}


@Override
public int getYCoordinate(int shipNumber) {
return yCoordinates.get(shipNumber);
}


@Override
public void paintObjects(Graphics g) {

//System.out.println("paintObjects called");

paintShips(xCoordinates, yCoordinates, g, shipColor, shipDimension, shipDimension);

}






}
[/Java]


Das ganze lauft in verschiedenen Threads ab. Einer aktualisiert das Bild all 30 ms, der andere führt die Berechnungen für neue Schiffe und alles durch. Aber wie gesagt, das speichern funktioniert irgendwie nicht.
 

icarus2

Top Contributor
So, ich habe den Code jetzt abeändert, sodass die Klasse Point verwendet wird:

[Java]
package aliens;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.geom.Point2D;
import java.util.*;
import tools.*;

public class Trins
extends Aliens
implements Updatable, Createable, Destroyable, Movable{


private final static int initialStructure = 50;
private final static int speedX = 5;
private final static int speedY = 2;
private static int currentAmountOfShips = 0;
private final static int shipDimension = 100;
private final static Color shipColor = Color.red;
//private final static int shotPower = 10;

//Attributes which store values during the game in Lists
private ArrayList<Integer> currentStructure = new ArrayList<Integer>();
private ArrayList<Point> coordinates = new ArrayList<Point>();

//done: Updatable, Creatable, Movable
//missing: Destroyable
@Override
public void updateObjects(){

if(super.shipGoingToBeCreated(currentAmountOfShips)){
createNewObject();
currentAmountOfShips++;
}


}

@Override
public void createNewObject(){

coordinates.add(new Point(calculateXCoordinatesNewShip(), calculateYCoordinatesNewShip()));
System.out.println("createNewObject: ArrayList-size:"+(coordinates.size()-1));

}


@Override
public int getStructure(int shipNumber) {
return currentStructure.get(shipNumber);
}


@Override
public void removeDestroyedObject(int shipNumber) {
//xCoordinates.remove(shipNumber);
//yCoordinates.remove(shipNumber);
currentStructure.remove(shipNumber);
}


@Override
public void setDamage(int shipNumber, int damage) {

int newStructure = currentStructure.get(shipNumber)-damage;

currentStructure.set(shipNumber, newStructure);
}


@Override
public int getSpeed(int shipNumber) {
return 5;
}


@Override
public int getXCoordinate(int shipNumber) {
return (int)(coordinates.get(shipNumber).getX());
}


@Override
public int getYCoordinate(int shipNumber) {
return (int)(coordinates.get(shipNumber).getY());
}


@Override
public void paintObjects(Graphics g) {

paintShips(coordinates, g, shipColor, shipDimension, shipDimension);

}






}
[/Java]

In Zeile 44 wird folgendes ausgegeben: createNewObject: ArrayList-size:0
 

icarus2

Top Contributor
Ja, aber das Problem ist, dass die ganze Zeit Elemente hinzugefügt werden sollten in Zeile 43.

Die Methode wird aber ganz sicher aufgerufen, habs mit System.out.println() ausprobiert.

Aber da tut sich nichts :-(
 

icarus2

Top Contributor
So, ich habe jetzt alles ausprobiert um den Fehler beheben zu können, doch es funktioniert leider immer noch nicht :-(

Ich habe jetzt mal den ganzen Code angehängt, so dass ihr in kompilieren könnt.

Interressant ist dabei vor allem die Klasse Trins, wo die Aliens erzeugt werden und alles andere, was durch die Interfaces implementiert wird. Da ist immer noch das problem, dass nicht in der ArrayList geaddet wird, obwohl es eigentlich sollte.

Ich wäre echt froh, wenn mir da jmd helfen könnte, denn ich komme wirklich nicht mehr weiter :/

(Und falls die Struktur des Programms völlig sinnlos ist bitte auch sagen ;-))
 

Landei

Top Contributor
Ich krieg das Zip-File nicht auf.

Davon abgesehen hast du ein sehr komisches Design: Jeder Alien-Typ bekommt ein Objekt und hält die "Einzelteile" seiner Schiffe in irgendwelchen Listen. Warum bekommt nicht jedes Alienschiff sein eigenes Objekt, das Position, Schaden usw. enthält? Im Konstruktor kann es sich auch in einer statischen Liste registrieren usw.
 

icarus2

Top Contributor
Hmm, stimmt das wäre echt besser wenn für jedes Schiff ein Ojbekt erzeugt wird.

Aber ich bin mir etwas unsicher wie ich das am besten anstelle dynamisch Objekte erzeugen zu können, diese zu speichern und anschliessend auf die Werte zuzugreiffen.

Hättest du eventuell ein Beispiel (etwas was du selber mal in die Richtung gemacht hast) auf Lager?
 

icarus2

Top Contributor
So, ich habe mir das hier jetzt gerade selber überlegt wie ich das machen könnte.

Ich erzeuge jetzt, wie du gesagt hast, ein Objekt für jedes Schiff und speichere dieses in einer statischen ArrayList. Ich habe gerade mit einfachen Beispielen etwas experimentiert und es scheint soweit zu funktionieren.

Ich probiere das jetzt mal umzusetzen.

Danke, war ein verdammt guter Tipp mit dem Objekte erzeugen :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Projekte in IDE untereinander sharen / Probleme beim Build Java Basics - Anfänger-Themen 8
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
N Probleme beim printen von Arrays durch for Schleife Java Basics - Anfänger-Themen 3
tom.j85 TicTacToe - probleme beim Casten Java Basics - Anfänger-Themen 6
D Probleme beim Kompelieren mache ich etwas falsch ? Java Basics - Anfänger-Themen 3
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
J Probleme beim Array ausgeben Java Basics - Anfänger-Themen 4
M Probleme beim verwenden von Packages Java Basics - Anfänger-Themen 6
G Methoden Probleme beim Methodenaufruf Java Basics - Anfänger-Themen 2
M Array mit eigenem Datentyp probleme beim übergeben Java Basics - Anfänger-Themen 6
G Probleme beim casten von double zu int Java Basics - Anfänger-Themen 3
J Probleme beim schreiben von Dateien Java Basics - Anfänger-Themen 5
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
M Erste Schritte Probleme beim Verknüpfen von Methoden Java Basics - Anfänger-Themen 15
A Probleme beim Methodenaufruf von Object[] ! Java Basics - Anfänger-Themen 12
A Probleme beim Methodenaufruf von char[] ! Java Basics - Anfänger-Themen 10
D JTable Probleme beim Sortieren von Zahlen. Java Basics - Anfänger-Themen 6
M OOP Probleme beim Funktionsaufruf, Java OpenCV Java Basics - Anfänger-Themen 0
X Probleme beim rekursiven Durchsuchen von Verzeichnissen Java Basics - Anfänger-Themen 1
B Probleme beim einlesen einer short variablen für einen Array Java Basics - Anfänger-Themen 1
A LinkedList: Probleme beim Auslesen Java Basics - Anfänger-Themen 2
F Probleme beim Übersetzen Java Basics - Anfänger-Themen 7
O Probleme beim import von Projekten in Eclipse Java Basics - Anfänger-Themen 7
C OOP Probleme beim Addieren von Arrays Java Basics - Anfänger-Themen 4
N Probleme beim entfernen eines JPanels Java Basics - Anfänger-Themen 4
J Probleme beim JRadioButton Java Basics - Anfänger-Themen 2
S Klasse properties - Probleme beim umwandeln Java Basics - Anfänger-Themen 3
M Input/Output Probleme beim Parsen von CSV und TXT Dateien Java Basics - Anfänger-Themen 7
C Probleme beim Array Java Basics - Anfänger-Themen 6
G Probleme beim HTML auslesen Java Basics - Anfänger-Themen 6
N Probleme beim Rechnen mit Integer und double Java Basics - Anfänger-Themen 4
T Probleme beim casten Java Basics - Anfänger-Themen 9
C Input/Output Probleme beim .jar erstellen Java Basics - Anfänger-Themen 5
M Klassen Probleme beim Debuggen - Datentypkonvertierung - Speichern in Datei Java Basics - Anfänger-Themen 7
W Probleme beim Wiedereinstieg Java Basics - Anfänger-Themen 25
P Interpreter-Fehler Probleme beim Ausführen einer Jar Datei Java Basics - Anfänger-Themen 2
F MVC -> Probleme beim Controller Java Basics - Anfänger-Themen 6
0 Log4J Probleme beim einlesen der Log datei Java Basics - Anfänger-Themen 2
F Probleme beim umwandeln von String in Int Java Basics - Anfänger-Themen 10
M Kontaktbuch - Probleme beim Input Java Basics - Anfänger-Themen 3
H Probleme beim erzeugen einer Headerdatei mit javah Java Basics - Anfänger-Themen 3
T Interpreter-Fehler Probleme beim .jar ausführen mit JRE 64bit Java Basics - Anfänger-Themen 9
M Probleme beim Beenden eines Threads Java Basics - Anfänger-Themen 25
A Probleme beim erstellen einer lauffähigen jar Java Basics - Anfänger-Themen 3
A Probleme beim IntervallCheck Java Basics - Anfänger-Themen 4
M Probleme beim Aufruf von Listener in anderer Klasse Java Basics - Anfänger-Themen 9
R Probleme mit NullPointer beim Mp3 abspielen (JMF) Java Basics - Anfänger-Themen 21
I Probleme beim Laden einer .gif-Datei. Java Basics - Anfänger-Themen 8
I Probleme beim Laden eins BufferedImage Java Basics - Anfänger-Themen 8
Sebi Probleme beim Kompilieren Java Basics - Anfänger-Themen 11
C Probleme beim casten und Objekt zugriff Java Basics - Anfänger-Themen 12
L Probleme beim Ausführen des Programms Java Basics - Anfänger-Themen 9
N Probleme beim abfangen von fehlern Java Basics - Anfänger-Themen 4
B kleine Probleme beim auslesen einer m3u Datei Java Basics - Anfänger-Themen 3
S Probleme beim Umwandeln von Long nach Int Java Basics - Anfänger-Themen 4
G Probleme beim Zufügen eines JLabels Java Basics - Anfänger-Themen 18
M Probleme beim Jar erstellen Java Basics - Anfänger-Themen 7
M Probleme beim Objekzugriff auf andere Klasse: NullPointerExc Java Basics - Anfänger-Themen 5
I Probleme beim Einrichten von Java (PATH-Veriable) Java Basics - Anfänger-Themen 4
A Memory Probleme beim Laden von thumbnails Java Basics - Anfänger-Themen 3
G Probleme beim Login (Webservice) Java Basics - Anfänger-Themen 4
B Probleme beim Kompilieren. Java Basics - Anfänger-Themen 12
M probleme beim parsen Java Basics - Anfänger-Themen 7
R Probleme beim Repaint Java Basics - Anfänger-Themen 3
M probleme beim applet einbinden Java Basics - Anfänger-Themen 7
L beim ersten compilen schon erste probleme Java Basics - Anfänger-Themen 8
R Probleme beim umwandeln eines String zu einem Int Wert Java Basics - Anfänger-Themen 3
M Probleme beim Datei auslesen Java Basics - Anfänger-Themen 6
M Probleme beim Compileren Java Basics - Anfänger-Themen 29
I Probleme beim ausführen des Programms Java Basics - Anfänger-Themen 6
kulturfenster Probleme beim Erstellen von Objekten Java Basics - Anfänger-Themen 15
kulturfenster Probleme beim Zeichnen einer Geraden Java Basics - Anfänger-Themen 8
S Probleme beim Java Kompilieren + ausführen Java Basics - Anfänger-Themen 6
M probleme beim kompilieren / übersetzen ! Systemeinstellung ? Java Basics - Anfänger-Themen 5
I Probleme beim Ausführen von Anwendungen Java Basics - Anfänger-Themen 2
S Probleme mit Datentyp beim Einlesen Java Basics - Anfänger-Themen 4
I java - probleme beim complimieren Java Basics - Anfänger-Themen 4
L Probleme beim ersten JavaProgramm! Java Basics - Anfänger-Themen 4
P Probleme beim Exportieren einer jar datei Java Basics - Anfänger-Themen 8
M Probleme beim Strich(e) zwichen Java Basics - Anfänger-Themen 3
M Probleme beim Drucken Java Basics - Anfänger-Themen 4
M Probleme beim Zuweisen eines Arbeitsverzeichnis Java Basics - Anfänger-Themen 2
A Probleme beim char-Vergleich! Java Basics - Anfänger-Themen 9
G Probleme beim Compilieren Java Basics - Anfänger-Themen 6
J Probleme beim Vererben Java Basics - Anfänger-Themen 2
B Probleme beim Dateien auslesen Java Basics - Anfänger-Themen 12
C Probleme beim overloaden. Java Basics - Anfänger-Themen 2
W MouseListener Probleme beim Abfangen Java Basics - Anfänger-Themen 8
X probleme beim import Java Basics - Anfänger-Themen 3
S Probleme beim Füllen einer HashMap Java Basics - Anfänger-Themen 15
K Probleme beim Einstieg Java Basics - Anfänger-Themen 2
I Probleme beim Ansprechen eines Arrays Java Basics - Anfänger-Themen 12
T Probleme beim Einlesen eines Strings Java Basics - Anfänger-Themen 3
K Neuronales Netz in Java und Probleme beim Konfigurieren Java Basics - Anfänger-Themen 2
N Probleme beim generieren von Objekten Java Basics - Anfänger-Themen 2
G Unknown Source Probleme beim Starten des Prgramms Java Basics - Anfänger-Themen 2
J probleme beim wieder aufruf Java Basics - Anfänger-Themen 2
J Probleme beim Erstellen eines Programms Java Basics - Anfänger-Themen 5
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben