Namenliste erstellen

Status
Nicht offen für weitere Antworten.

babuschka

Top Contributor
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

Bekanntes Mitglied
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"...

Code:
List<String> l = new ArrayList<String>();

erzeugt eine ArrayList die Strings aufnehmen kann.

Noch Fragen ;-)
 

0x7F800000

Top Contributor
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

Bekanntes Mitglied
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

Top Contributor
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...

Code:
   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

Top Contributor
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...

Code:
   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]);
         }
      }
   }
}

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

babuschka

Top Contributor
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

Top Contributor
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
Code:
System.out.println()
zeugs hinschreiben, was braucht man denn da noch großartig?
 

babuschka

Top Contributor
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
Code:
System.out.println()
zeugs hinschreiben, was braucht man denn da noch großartig?

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

Top Contributor
dann musst du (wie so oft) worher auf null prüfen:
Code:
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

Top Contributor
dann musst du (wie so oft) worher auf null prüfen:
Code:
if(liste[j]!=null){
   System.out.println("Name...Buchstaben..."+liste[j].length);
}
dann hagelt es auch nicht mit NullPointerExceptions (was es vorher tun sollte)

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

babuschka

Top Contributor
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

Top Contributor
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:
Code:
        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.

Code:
        for(int i=0; i<=liste.length;i++){
sowas endet immer mit einer ArrayIndexOutOfBoundsException, weil der letzte Index gar nicht existiert. es soll stattdessen
Code:
        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?
Code:
            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
Code:
null.length(); //es gibt immer exception, was sonst...
genauso wie in dem konkreten Fall:
Code:
liste[j].length(); //es gibt exception wenn liste[j]==null ist
genau das sollte die von mir hingeschriebene if-konstruktion verhindern. Also nochmal:
Code:
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:
Code:
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...
 
Zuletzt bearbeitet von einem Moderator:

babuschka

Top Contributor
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:
Code:
        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.

Code:
        for(int i=0; i<=liste.length;i++){
sowas endet immer mit einer ArrayIndexOutOfBoundsException, weil der letzte Index gar nicht existiert. es soll stattdessen
Code:
        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?
Code:
            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
Code:
null.length(); //es gibt immer exception, was sonst...
genauso wie in dem konkreten Fall:
Code:
liste[j].length(); //es gibt exception wenn liste[j]==null ist
genau das sollte die von mir hingeschriebene if-konstruktion verhindern. Also nochmal:
Code:
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:
Code:
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...



ja werde ich machen bin neu hier tut mir leid wusste nihts davon. Habe es hingekriegt vielen vielen DANK!
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben