# Namenliste erstellen



## babuschka (19. Feb 2009)

Hallo Community, 

muss ich hier in diesem Fall Array Methode verwenden? Oder ist es auch ohne lösbar? Danke im Voraus. 

die Aufgabe lautet: 


Gruppen 
Es soll wieder eine Namensliste erfasst werden, 
beendet durch "." (Siehe Namensliste) 
Nun soll das Programm alle möglichen 2er-Gruppen ausgeben 
(z.B. Eingabe Dagmar, Petra und Frieder 
Ausgabe (zum Beispiel): 
Dagmar Petra 
Dagmar Frieder 
Petra Frieder 

Hinweis: Sie brauchen zwei ineinander gesteckte Schleifen


----------



## knowledge (19. Feb 2009)

Hallo,

nunja, ein Array empfiehlt sich eigentlich nur, wenn die Anzahl der aufzunehmenden Elemente (Namen) vorher bekannt ist bzw. vom Nutzer eingegeben werden kann. In diesem Fall würde ich sagen eher kein Array nehmen. Besser eine ArrayList. Diese kann beliebig "wachsen"...


```
List<String> l = new ArrayList<String>();
```

erzeugt eine ArrayList die Strings aufnehmen kann.

Noch Fragen ;-)


----------



## 0x7F800000 (19. Feb 2009)

knowledge hat gesagt.:


> ein Array empfiehlt sich eigentlich nur, wenn die Anzahl der aufzunehmenden Elemente (Namen) vorher bekannt ist bzw. vom Nutzer eingegeben werden kann. In diesem Fall würde ich sagen eher kein Array nehmen. Besser eine ArrayList. Diese kann beliebig "wachsen"...


ein ArrayList empfielt sich auch dann, wenn die Anzahl vorher bekannt ist, bzw sich nur äußerst selten ändert, oder wenn unbedingt random access benötigt wird. In diesem Fall wäre eher eine LinkedList angebracht, weil man ja dauernd neue Elemente hinzufügt: das ist bei ArrayList auf dauer relativ teuer, bei LinkedList wird es dagegen immer in konstanter Zeit erledigt.


----------



## knowledge (19. Feb 2009)

Recht hast du...

>oder wenn unbedingt random access benötigt wird

Random Access hab ich ja auch bei Arrays. Ich kann jederzeit mittels

meinarray[x] auf den wert x zugreifen, oder wie meinst du das


----------



## ARadauer (19. Feb 2009)

ich denke dass er sicher wahrscheinlich gar keine arraylist verwenden darf

"muss ich hier in diesem Fall Array Methode verwenden?" was meinst du damit?

alle möglichen zweier kombis macht man mit zwei for schleifen...


```
public static void main(String[] args) {   
      String[] names = {"Dagmar", "Petra", "Frieder", "Test"}; 
      for(int i  =0; i <names.length; i++){
         for(int j = i+1; j<names.length; j++){
            System.out.println(names[i]+" "+names[j]);
         }
      }
   }
}
```


----------



## babuschka (19. Feb 2009)

ARadauer hat gesagt.:


> ich denke dass er sicher wahrscheinlich gar keine arraylist verwenden darf
> 
> "muss ich hier in diesem Fall Array Methode verwenden?" was meinst du damit?
> 
> ...



Ja aber die Namen müssen von benutzer eingegeben werden die dürfen nicht vorgegeben!


----------



## babuschka (19. Feb 2009)

FBI_1907 hat gesagt.:


> Ja aber die Namen müssen von benutzer eingegeben werden die dürfen nicht vorgegeben!



es müssen namen eingegeben werden man beendet die eingabe mit "." danach müssen die eingegebene namen mit buchstabenanzahl angezeigt werden aber es musst in liste ausgegeben werden ich kann ja alles bis auf listen ausgabe


----------



## 0x7F800000 (19. Feb 2009)

FBI_1907 hat gesagt.:


> Ja aber die Namen müssen von benutzer eingegeben werden die dürfen nicht vorgegeben!


War das jetzt ein Witz oder wie? Der ARadauer hat dir doch netterweise schon die Halbe Aufgabe gelöst -.-

Erste Seite dritter Punkt zweite Spalte?!
Weiß nich, was man dazu noch sagen soll... ?


----------



## 0x7F800000 (19. Feb 2009)

FBI_1907 hat gesagt.:


> es müssen namen eingegeben werden man beendet die eingabe mit "." danach müssen die eingegebene namen mit buchstabenanzahl angezeigt werden aber es musst in liste ausgegeben werden ich kann ja alles bis auf listen ausgabe


Ja, lol, dann sag doch konkret wo es stress gibt.
Du hast irgendeine Hausaufgabe hingeworfen, ARadauer hat dir irgendeine Teillösung an den Kopf geworfen, und das war imho schon ein Tick zu viel, da bleibt ja kaum was für dich übrig^^
Was ist jetzt also dein Problem mit der Ausgabe? Auf die Konsole kann man wunderbar mit

```
System.out.println()
```
zeugs hinschreiben, was braucht man denn da noch großartig?


----------



## babuschka (19. Feb 2009)

Andrey hat gesagt.:


> Ja, lol, dann sag doch konkret wo es stress gibt.
> Du hast irgendeine Hausaufgabe hingeworfen, ARadauer hat dir irgendeine Teillösung an den Kopf geworfen, und das war imho schon ein Tick zu viel, da bleibt ja kaum was für dich übrig^^
> Was ist jetzt also dein Problem mit der Ausgabe? Auf die Konsole kann man wunderbar mit
> 
> ...



schau mal!
 habe das hier programmiert:

 public static void main(String [] args ) {

        String[] names = {};

        String liste[]=new String[10];

        for(int i=0; i<=liste.length;i++){
            System.out.println("Geben Sie Name ein: ");
            name=Eingabe.readString();

           if(name.equals (".")){
            System.out.println("Listeneingabe beendet!");
           for(int j=0; j<=liste.length;j++){ //Für die Liste
           System.out.println("Name: "+liste[j]+" Buchstaben: "+name.length());
           }
            break;
            }
            else{
            liste_=name;
            }
            }
            }
            }



ALS AUSGABE KOMMT: 

Name: müller Buchstaben: 1
Name: franz Buchstaben: 1
Name: matti Buchstaben: 1
Name: null Buchstaben: 1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
Name: null Buchstaben: 1
        at namenlänge.Main.main(Main.java:40)
Name: null Buchstaben: 1
Name: null Buchstaben: 1
Name: null Buchstaben: 1
Name: null Buchstaben: 1
Name: null Buchstaben: 1
Java Result: 1
BUILD SUCCESSFUL (total time: 6 seconds)


Ich will dass nur die namen die eingegeben wird, angezeigt(ausgegeben) werden und keine Nullen! Das ist mein problem...._


----------



## 0x7F800000 (19. Feb 2009)

dann musst du (wie so oft) worher auf null prüfen:

```
if(liste[j]!=null){
   System.out.println("Name...Buchstaben..."+liste[j].length);
}
```
dann hagelt es auch nicht mit NullPointerExceptions (was es vorher tun sollte)


----------



## babuschka (19. Feb 2009)

Andrey hat gesagt.:


> dann musst du (wie so oft) worher auf null prüfen:
> 
> ```
> if(liste[j]!=null){
> ...



wo hin muss ich das genau einfügen? Muss ich etwas verstellen?


----------



## 0x7F800000 (19. Feb 2009)

na direkt statt der einzelnen System.out.--- Zeile fügst du halt einfach so einen 3-zeiligen block ein.


----------



## babuschka (19. Feb 2009)

Andrey hat gesagt.:


> na direkt statt der einzelnen System.out.--- Zeile fügst du halt einfach so einen 3-zeiligen block ein.



So habe es jetzt geändert:


 public static void main(String [] args ) {

        String name;

        String[] names = {};

        String liste[]=new String[100];

        for(int i=0; i<=liste.length;i++){
            System.out.println("Geben Sie Name ein: ");
            name=Eingabe.readString();

           if(name.equals (".")){
            System.out.println("Listeneingabe beendet!");
           for(int j=0; j<=liste.length;j++){ //Für die Liste
               if(liste[j]!=null){

            }
           System.out.print("Name: "+liste[j]);
           System.out.println(" Buchstaben: "+liste[j].length());
           }
            break;
            }
            else{
            liste_=name;
            }
            }
            }
            }

Augabe stimmt:

Name: müller Buchstaben: 6
Name: franz Buchstaben: 5
Name: gert Buchstaben: 4
Exception in thread "main" java.lang.NullPointerException
        at namenlänge.Main.main(Main.java:44)
Name: nullJava Result: 1
BUILD SUCCESSFUL (total time: 12 seconds)


Nun stört mich jetzt die Meldung Ex.... wie krieg ich das weg kannst du mir das bitte erklären ich weis ich nerv gerade aber bin anfängerin  muss es mir selber beibringen.SORRY_


----------



## 0x7F800000 (19. Feb 2009)

erstmal: bitte code-tags verwenden. Im Forum herrscht im moment leider wegen dem Umzug das totale chaos, aber dennoch bitte ich nächstes mal den code in code-tags der Gestalt 
[€ODE]
 //mein code 
[/€ODE]
einzuschließen (mit C statt €, versteht sich). Thx.

 Also, für den Anfang einige bemerkungen:

```
String[] names = {};
```
diese variable wird doch gar nicht verwendet oder? Da sollten doch auch Warnungen raustropfen, bzw jede normale IDE würde es gelb anstreichen => raus damit.


```
for(int i=0; i<=liste.length;i++){
```
sowas endet immer mit einer ArrayIndexOutOfBoundsException, weil der letzte Index gar nicht existiert. es soll stattdessen

```
for(int i=0; i<liste.length;i++){
```
heißen, sonst geht das kaputt. Das kommt an einer weiteren stelle vor: dort auch korrigieren.

So, und was hast du denn hier gemacht?

```
if(liste[j]!=null){
   
            }
```
welchen Sinn soll so eine Konstruktion überhaupt erfüllen? Die kann doch prinzipiell niemals etwas machen.

Es sollte ja gegen NullPointerExceptions helfen. Wann fliegt eine NullPointerexception? Wenn du irgendwo auf ein null zugreifst, und versuchst damit irgendwas zu machen. Etwa

```
null.length(); //es gibt immer exception, was sonst...
```
genauso wie in dem konkreten Fall:

```
liste[j].length(); //es gibt exception wenn liste[j]==null ist
```
genau das sollte die von mir hingeschriebene if-konstruktion verhindern. Also nochmal:

```
if(liste[j]!=null){
   liste[j].length; //<-Hier ist das element garantiert nicht null, also ist alles oK
}
```

Im hinblick auf den gesammten code erscheint mir sowas aber allgemein weniger geeignet: du schachtelst da zuviel, if in schleifen, schleifen in if's, das ist doch alles viel zu kompliziert. Unterteile das doch:

```
String[] liste=new String[langGenugEtwa100];

//EINGABE
for(int i=0; i<liste.length; i++){
   //name einlesen
   //falls "." dann break
   //ansonsten zur liste hinzufügen, weitermachen
}

//AUSGABE
for(int i=0; i<liste.length; i++){
   if(liste[j]!=null){
      //ausgeben
   }else{
      //liste ist zuende, ab hier ist alles mit null gefüllt
      break;
   }
}
```
dann ist das zumindest nicht so komisch verschachtelt...


----------



## babuschka (19. Feb 2009)

Andrey hat gesagt.:


> erstmal: bitte code-tags verwenden. Im Forum herrscht im moment leider wegen dem Umzug das totale chaos, aber dennoch bitte ich nächstes mal den code in code-tags der Gestalt
> [€ODE]
> //mein code
> [/€ODE]
> ...





ja werde ich machen bin neu hier tut mir leid wusste nihts davon. Habe es hingekriegt vielen vielen DANK!


----------



## 0x7F800000 (19. Feb 2009)

FBI_1907 hat gesagt.:


> ja werde ich machen bin neu hier tut mir leid wusste nihts davon. Habe es hingekriegt vielen vielen DANK!


Da ist jetzt so ziemlich jeder neu hier, scheiß überfülltes Layout treibt mich noch in den Wahnsinn^^


----------

