# Hinzufügen von Elementen in ArrayList



## absoluteBeginner (21. Sep 2009)

Hallo,

ich habe ein Programm zur Speicherung einer Telefonliste zu schreiben und habe Probleme beim Hinzufügen von Elementen. Sobald ich neue Elemente mit add() hinzufüge, werden bisher enthaltene überschrieben. Hier ein Auszug aus meinem Code:


```
package Telefonliste:

import java.util.ArrayList;

public class test2 {
	
	public static ArrayList<test1> liste; 

	/**Erzeugt eine leere telefonliste
     * 
     */
    public static void getArrayList(){
    	liste = new ArrayList<test1>();
    }
  
    /**Liefert Anzahl der Elemente in ArrayList 
     * @return int Anzahl der Elemente
     */
	public static int getSizeArrayList(){
		int a = liste.size();
		if (a==0){
			return a;
		}
		else{
			return (a-1);
		}
	}

	/**speichert neuen Eintrag in ArrayList
     * @param neuer Eintrag
     */
    public static void addEintrag(test1 eintragNeu) {
        liste.add(eintragNeu);
        String pers = test1.getName(eintragNeu);
		String nr = test1.getNummer(eintragNeu);
        System.out.println(pers + " mit der Nummer " + nr + " wurde eingetragen.");
    }

	/**Liefert ein Array aller Einträge
     * @return Array aller Einträge
     */

    public static Object[] getArray() {
    	System.out.println(liste.size());
    	Object [] alle = new Object[liste.size()];
        for (int i=0; i<liste.size(); i++) {
            alle[i] = liste.get(i);
            String pers = test1.getName(liste.get(i));
            String nr = test1.getNummer(liste.get(i));
            System.out.println(pers + " " + nr);
        }
        return alle;
    }
    
    /**Liefert Index eines Eelments in ArrayList
     * @param String einer Person oder Nummer
     * @return Index
     */
    
    public static int getIndex (String eingabe){
    	Object[] alle = getArray(); 
		
    	int index = 0;
    	String pers;
    	String nr;
 
    	for (int i=1; i<liste.size(); i++) {
    		Object element = alle[i];
    		pers = test1.getName(element);
    		nr = test1.getNummer(element);
    		System.out.println(pers +" " + nr +" " + i);
    		
        	if (pers.equals(eingabe) ||  nr.equals(eingabe)){
        		index = i;
        	}
    	}
    	return index;
    }
   
}
```


```
package Telefonliste;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class test1 {
		
		public static String eintrag;
		public static String name;
		public static String telefonnummer;
		
	    
	     /**Methode zum Einlesen von Benutzereingaben
	      * @return eintrag
	      */
		public static java.lang.String eintrag(String text) {
			System.out.println(text);
			
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			eintrag = "";
			try{
				eintrag = br.readLine();
			}
			catch (Exception e){
				System.err.println("Fehler bei der Verarbeitung: " + e.getLocalizedMessage());	
			}
			return eintrag;
		}
		
		//Kontruktor
		
		public test1 (String name, String telefonnummer){
	    	this.name=name;
	    	this.telefonnummer=telefonnummer;
	    }
		
		/**
		  * Methode zur Rueckgabe der gespeicherten Werte; Hier: Name
		  * @return name
		  */
		 public static String getName(Object element){
			    return name;
		 }

		 /**
		  * Methode zur Rueckgabe der gespeicherten Werte; Hier: Telefonnummer
		  * @return telefonnummer
		  */
		public static String getNummer(Object element){
		  return telefonnummer;
		}
		
		
		/**
		  * Methode zur Eingabe und Speicherung eines neuen Eintrags
		  */
		public static void eintragAnlegen() {
	    	String person = eintrag("Bitte Namen angeben: ");
	    	String nummer = eintrag("Bitte Nummer angeben: ");
	    	test1 eintragNeu = new test1(person, nummer);
	    	test2.addEintrag(eintragNeu);
	    }
		
		
		public static void main (String []args){
			
			String antwort1;
			
			test2.getArrayList();
			test1 eintragNeu = new test1("leer", "leer"); // Index 0 besetzen
	    	test2.addEintrag(eintragNeu);
			
			do{
				System.out.println("Anzahl bisherige Einträge: " + test2.getSizeArrayList());
				eintragAnlegen();
				antwort1 = new String(eintrag("Möchten Sie fortsetzen?(j/n)"));
			}
			while(antwort1.equals("j"));
			
			test2.getArray();
			String eintrag = eintrag("Name:");
			test2.getIndex(eintrag);
		}
}
```

Das Problem muss irgendwie in den Methoden eintragAnlegen() und addEintrag() liegen. Wenn man mehrere Einträge speichert, werden bei der Methode getArray() nur der letzte Eintrag (allerdings mehrfach, d.h. in allen besetzten Indizes) aus der ArrayList ausgelesen (Bsp: Gespeichert werden Name a mit Nummer 1, Name b mit Nummer 2 und Name c mit Nummer 3, ausgelesen wird  auf Index 0 bis 2 Name c mit Nummer 3).
Wo liegt der Fehler?


----------



## Wookie81 (21. Sep 2009)

Hey sorry nimms mir nicht übel, aber der Code ist grauenvoll! Wäre sicher ein Anwärter auf "Schlechtester Code des Monats" - wenns sowas geben würde 

Zum Problem: Du rufst in der Klasse test2 in Zeile 48 f. und 69 f. statische Funktionen der Klasse test1 auf. Diese liefern dir die statischen Variablen der Klasse test1 (also die zuletzt in der Klasse test1 gesetzten Werte für name und telefonnummer) -> und das sind halt Name c und Nummer 3.

Wk

edit: Ups Lösung vergessen: Zum einen müssen die statischen Variablen in test1 raus und zum anderen in den oben genannten Zeilen die getter der einzelnen Elemente verwenden.


----------



## absoluteBeginner (21. Sep 2009)

Grauenvoll ist da wohl noch geschmeichelt   - ich bastel schon zu lange an dem Ding herum...
Danke für den Tipp, das ist es!


----------

