Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 20:28

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Java: Arrays auslesen, speichern und vergleichen?!

Discussion on Java: Arrays auslesen, speichern und vergleichen?! within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
Belur's Avatar
 
elite*gold: 0
Join Date: Jul 2009
Posts: 3,441
Received Thanks: 1,473
Java: Arrays auslesen, speichern und vergleichen?!

Hey E*pvpers.


Ich besuche seid Anfang dieses Schuljahres jetzt den InfoLk.

Wir programmieren und werden auch weiterhin vorerst, in Java programmieren und benutzen den Compiler BlueJ wobei das ja eher nebensächlich ist.

Nun zu meinem Problem.

Wir sind angefangen an einem Projekt "Schule" zu arbeiten.
Im Moment sind wir auf dem Stand, dass man eine Anzahl von Leheren und Schülern erzeugt, die man im Parameter festlegen kann.

Diese Lehrer und Schüler werden mit Daten aus der Klasse Personengenerator gefüllt und in Arrays gespeichert. Unter anderem auch mit einem Namen.

Die vielfalt dieser Namen ist nebenbei bemerkt nicht riesig deswegen hatten wir folgende Aufgabe.

Wir sollten überlegen wie es möglich ist eine Methode zu schreiben, die ausgibt wie viele Lehrer und Schüler den gleichen Namen haben.

Ich poste mal den relevanten Quellcode der vllt hilfreich ist um sich reinzuversetzen:

Soo: Da hätten wir einmal die Erzeugung der Lehrer etc und die Speicherung in den Arrays.

PHP Code:
public Schule(int anzahlSchuelerint anzahlLehrerint anzahlHausmeister)
    {
        
Personengenerator personGen = new Personengenerator();
        
        
lehrerArray = new Lehrer[anzahlLehrer];
        
schuelerArray = new Schueler[anzahlSchueler];
        
hausiArray = new Hausmeister[anzahlHausmeister];
        
        for(
int i=0i<lehrerArray.lengthi++)
        {
            
lehrerArray[i]= new Lehrer(personGen.gibNachnamen(), personGen.gibMaennlichenVornamen(), personGen.gibAlterVonBis(25,60), "-"3000personGen.gibZufFach(), personGen.gibZufFach());  
        }
        
        for (
int i=0i<schuelerArray.lengthi++)
        {
            
schuelerArray[i] = new Schueler(personGen.gibNachnamen(), personGen.gibMaennlichenVornamen(), personGen.gibAlterVonBis(10,22),"-"personGen.gibIqVonBis(80,160));
        } 
Und hier der besagte Personengenerator wobei ich mal nur den Teil mit den Namen rauskopiert hab:
PHP Code:
public class Personengenerator
{

    
// Arrays k�nnen z.B. auf diese Weise erzeugt werden
    
private String[] nachnamen = {"Acker","Adam","Albrecht","Axt","Paul","Simon","Henning","Uffelmann","Roeders",
            
"Lins""Meyer""Hett""Flanders""Potter""Urkel""Korn""Schmidt""Geist""Kipp",
            
"Simpson"};
    private 
String[] vornamenW = {"Anke""Annika""Kathrin""Monika""Karina""Liselotte""Berta""Sarah",
            
"Hannah""Sophie""Emma""Jessica""Leonie""Melina""Alina"};

    private 
String[] vornamenM = {"Julian""Tim""Florian""Patrick""Felix""Tobias""Kevin""Simon""Andreas""Felix",
            
"Daniel""Harry""Linus""Christian""Brian""Jannik""Wayne""James""Carlos""Gregor"};

    private 
String[] fach = {"Deutsch""Latein""Englisch""Informatik""Spanisch""Mathe""Sport""Biologie""Physik",
            
"Philo""Erdkunde"};
    
/**
     * Constructor for objects of class Personengenerator
     */
    /**
     * Gibt einen m�nnlichen Vornamen zur�ckl
     */ 
    
public String gibMaennlichenVornamen(){        
        
int anzahl gibZufallsZahl(gibAnzahlVornamenM());
        return 
vornamenM[anzahl];
    }

 
    
/**
     * gibt einen Nachnamen zur�ck
     */
    
public String gibNachnamen(){
        
int anzahl gibZufallsZahl(gibAnzahlNachnamen());
        return 
nachnamen[anzahl];
    } 



Habe jetzt leider das Problem, dass ich nicht weiß, wie man die Namen in den Arrays genau vergleichen kann bzw ausgeben kann wie viele Lehrer und Schüler jeweils den selben Namen haben.

Vllt weiß von euch da einer weiter bzw weiß wie sich das programmieren lässt.


Greets

~Belur
Belur is offline  
Old 09/28/2011, 15:22   #2

 
Obilee's Avatar
 
elite*gold: 11
Join Date: May 2007
Posts: 62,452
Received Thanks: 29,520
Willst du prüfen wie oft ein bestimmter Name vorhanden ist oder willst du allgemein eine Liste welcher Name wie oft vorhanden ist ?

Für den ersten Fall:



für den 2ten Fall nimmst du einfach die gleiche Methode nur lässt du sie halt in einer Schleife mit allen Einträgen aus dem Array aufrufen.
Obilee is offline  
Thanks
1 User
Old 09/28/2011, 15:26   #3
 
Belur's Avatar
 
elite*gold: 0
Join Date: Jul 2009
Posts: 3,441
Received Thanks: 1,473
Eigentlich will ich überprüfen wie oft ein Lehrer und ein Schüler den gleichen Namen haben.

Deins hilft mir aber bei ner anderen Sache weiter. Danke dafür schonmal :>


#edit:

Ich denke mal ich werde dann die 2. Methode jeweils für Schüler und Lehrer machen und dann die beiden Ergebnisse abgleichen. Hoffe das klappt.

Danke dir
Belur is offline  
Old 09/28/2011, 15:40   #4

 
Obilee's Avatar
 
elite*gold: 11
Join Date: May 2007
Posts: 62,452
Received Thanks: 29,520
Wenn du wissen willst wie oft es überhaupt Wiederholungen gibt mach es so:

Obilee is offline  
Thanks
1 User
Old 09/28/2011, 15:51   #5
 
Belur's Avatar
 
elite*gold: 0
Join Date: Jul 2009
Posts: 3,441
Received Thanks: 1,473
Genau sowas =)

Hab das jetzt trotzdem mal aus eigenem Interesse versucht. Also zu gucken wie oft ein bestimmter Name, in dem Array vorhanden ist:

PHP Code:
 //static String[] namen = {"Patrick", "Patrick", "Walter", "Nils", "Nils"};
    

    
public void checkAnzahl(String name){
        
int anzahl 0;

        for (
int i 0lehrerArray.lengthi++) {
            if(
lehrerArray[i].equals(name))
                
anzahl++;        
        }

        
System.out.println(name " ist " anzahl " mal vorhanden.");
    } 

Wenn ich die Namen aus dem aus dem static String[] nehme und die Schleife dementsprechend änder klappt das alles.

Sobald ich allerdings prüfen will wie oft ein Name aus dem lehrer.Array dabei ist, gibt er mir immer 0 aus.

Auch wenn ich sehe, dass mindestens einer dabei ist.

Weiß leider nicht worans liegt. Warscheinlich irgendwas ganz dummes aber ich bin nicht so der Java Pro .D
Belur is offline  
Old 09/28/2011, 15:57   #6

 
Obilee's Avatar
 
elite*gold: 11
Join Date: May 2007
Posts: 62,452
Received Thanks: 29,520
Ich hatte jetzt einfacherhalber einfach ein String Array genommen, du hast aber wie ich sehe Arrays aus Lehrer Objekten usw.

Also musst du Anstatt:

if(lehrerArray[i].equals(name))
=>
if(lehrerArray[i].getname.equals(name))

nehmen, oder wie auch immer bei dir die methode bei der heißt um vom lehrer den namen zu bekommen, wie du es jetzt hast prüft er ob der string name gleich dem objekt lehrer ist, was natürlich nicht stimmt weils verschiedene objekte sind
Obilee is offline  
Thanks
1 User
Old 09/28/2011, 16:19   #7
 
Belur's Avatar
 
elite*gold: 0
Join Date: Jul 2009
Posts: 3,441
Received Thanks: 1,473
Hatte erst versucht die Methode einzusetzen von ganz oben. Also gibMaennlichenVornamen.

Klappte aber nicht bis ich dann irgenwann das Attribut eingesetzt hab.

Also:

if(lehrerArray[i].vorname.equals(name))
Weiß nicht ob das so vorgesehen ist, oder ob da eigentlich ne Methode hin muss.


Hast du deine Quelltexte eig eben mal schnell selbst gemacht? O.o
Belur is offline  
Old 09/28/2011, 16:24   #8

 
Obilee's Avatar
 
elite*gold: 11
Join Date: May 2007
Posts: 62,452
Received Thanks: 29,520
Wenn die Variable in der Klasse public ist, ist es egal ob du es mit .vorname machst oder ob du dafür eine eigene Methode schreibst und dann .getVorname() nimmst. Idr macht man die Variablen aber Private und dann greift man mit setter / getter Methoden auf diese zu.

Mach es einfach so wie es jetzt klappt.


Die Quelltexte habn vllt. 1min gedauert die zu schreiben, also ja.
Obilee is offline  
Thanks
1 User
Old 09/28/2011, 16:27   #9
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,624
Dein Array enthält ja auch Objekte der Klasse Lehrer, während die Methode gibMaennlichenVornamen() nur für Objekte der Klasse Personengenerator definiert ist.

Dementsprechend kannst du die Methode natürlich auch nicht über ein Lehrer-Objekt aufrufen.

Und ja, du kannst das schon so machen, dass du direkt auf das Attribut zugreifst, sofern der Zugriffsmodifizierer für das Attribut public ist. Wobei das im Hinblick auf die Datenkapselung nicht unbedingt sauber ist, da wäre ein Attribut mit private Modifzierer und eine public Getter-Funktion eleganter.
Jedenfalls wäre das in C++ so, wie das genau in java läuft weiß ich leider nicht, da ich nie Java gelernt habe.
Muddy Waters is offline  
Thanks
1 User
Old 09/28/2011, 16:28   #10
 
Belur's Avatar
 
elite*gold: 0
Join Date: Jul 2009
Posts: 3,441
Received Thanks: 1,473
Gut danke dir. Ja vllt kommen wir da auch noch hin mit dem setter/getter.


Sag mir lieber nicht wie lange du für sowas brauchst. Das deprimiert

Erstmal das andere einbauen jetzt. Vielen Dank schonmal :>


#edit:

@Muddy Waters

Ja wenn ihr das so sagt ist das schon logisch. Aber als Anfänger und allein kommt man da leider zu selten drauf -.-"
Ich glaub bei uns im Unterricht ist so einiges nicht ganz sauber. Vllt wird es dazu noch kommen.
Belur is offline  
Old 09/28/2011, 16:33   #11

 
Obilee's Avatar
 
elite*gold: 11
Join Date: May 2007
Posts: 62,452
Received Thanks: 29,520
Würdest du Eclipse zum Programmieren nutzen wäre der Fehler dir nicht passiert weil es direkt ne Fehlermeldung geben würde bzw. wenn man Objekt. schreibt kommt gleich eine Liste welche Methoden man mit dem Objekt benutzt kann, mit rückgabetypen usw.

Übung macht den Meister.
Obilee is offline  
Thanks
1 User
Old 09/28/2011, 16:49   #12
 
Belur's Avatar
 
elite*gold: 0
Join Date: Jul 2009
Posts: 3,441
Received Thanks: 1,473
Leider ist uns BlueJ vorgegeben. gefällt mir erlich gesagt auch nicht wirklich.

Die Sachen zuhause könnte ich ja theoretisch damit machen. Mal austesten.

Jetzt hab ich aber doch nochmal ne Frage:

Dies hier: hab ich zu dem gemacht:

PHP Code:
public  void checkAnzahlUeberschneidungen(){
                  
int anzahlUeberschneidungen 0;
                 
                  for (
int i 0lehrerArray.lengthi++) {
                        for (
int j 0schuelerArray.lengthj++) {
                                if(
lehrerArray[i].vorname.equals(schuelerArray[i].vorname)){
                                        
anzahlUeberschneidungen++;
                                        break;
                                }
                        }
                  }
                 
                  
System.out.println("Es gibt " anzahlUeberschneidungen " überschneidungen.");
        } 
Das klappt auch wunderbar. Ich frag mich nur wie das inhaltlich ist:

Ich hab mal 100 Lehrer und 100 Schueler zum Test gemacht.
Raus kamen 5 Überschneidungen.

Jetzt weiß ich nicht:

5 Mal der gleiche Name eines Schuelers wie der eines Lehrers an der gleichen "Array Position"?

Beispielsweiße gibts 20 Schueler die zusammen die Namen Peter, Harry, Sebastian, Jonas und Jens haben. Also haben mehrere Schueler davon den Namen. Und dann gibts halt eine Anzahl Lehrer die den Namen auch haben.

Davon kanns ja auch wieder mehrere geben. Also die gleichen Überschneidungen wenn auch wenn mehrere Schueler und Lehrer den Namen haben.
Dann hätten sich bei 40 Personen ja 5 Namen überschnitten.

Oder ganz anders?



Ich hab mich schlecht ausgedrückt, sorry, aber ich kanns schlecht beschreiben -.-"

Bin dann ma zum Tennis. Bis später und danke für die Hilfe. Haltet mich nicht fürn Deppen :>

Greets
Belur is offline  
Old 09/28/2011, 16:59   #13

 
Obilee's Avatar
 
elite*gold: 11
Join Date: May 2007
Posts: 62,452
Received Thanks: 29,520
Du prüft alle Namen von den Lehrern mit den Namen von den Schülern. Da wir überhaupt nur prüfen ob es gleiche Namen gibt ist es uns egal ob es bei den Schülern 20x Patrick gibt oder nicht. Das würde nur bei den Lehrern eine Rolle spielen.

Dafür gibts halt jetzt zwei Lösungsmöglichkeiten:

Entferne vorübergehend alle Mehrfacheinträge bei den Lehrern und prüfe so mit dem neuen Array, oder erstell dir eine Liste mit den Lehrernamen die du schon überprüft hast und checke einfach bevor du den Namen mit dem Schülerarray vergleichst ob der Name schon in dem "habe schon den namen geprüft array" vorhanden ist, falls ja dann geh zum nächsten index, falls nicht prüf den namen.

Ich bin auch erstmal weg von daher gibts jetzt auch keinen Code :P
Obilee is offline  
Thanks
1 User
Old 09/28/2011, 21:44   #14
 
Belur's Avatar
 
elite*gold: 0
Join Date: Jul 2009
Posts: 3,441
Received Thanks: 1,473
Was bewirkt eigentlich genau das break;

Wenn ich das rausnehme, hab ich auf einmal ziemlich viele Überschneidungen.

Scheint ja irgendwie wesentlich zu sein, aber wir haben damit noch nie gearbeitet :>
Belur is offline  
Old 09/28/2011, 21:54   #15

 
Obilee's Avatar
 
elite*gold: 11
Join Date: May 2007
Posts: 62,452
Received Thanks: 29,520
Damit beendet man / bricht man die Schleife ab in der das break; ausgeführt wird.

z.b

for (int i = 0; i < 5; i++) {
System.out.println(i);
}

Ausgabe wird sein: 0 1 2 3 4

Wenn du jetzt z.b sowas machst:

for (int i = 0; i < 5; i++) {
System.out.println(i);
if (i == 2) {
break;
}}

bricht er wenn i = 2 ist die Schleife ab und du wirst als Ausgabe nur 0 1 2 haben
Obilee is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
[Problem] Inputbox(GUI) auslesen und als Variable speichern
08/08/2010 - AutoIt - 8 Replies
Hallo, ich bin neu hier und habe ein Problem mit Autoit hier erstmal das Script : #include <ButtonConstants.au3> #include <EditConstants.au3>
[Java] Code-Beispiele für String, Arrays und und...
06/02/2010 - Coding Tutorials - 9 Replies
Joa, da ich Heute meine Informatik Prüfung in der Uni hatte ( und es sollte wohl min. eine 2 raus gekommen sein ) hatte ich Gestern so in ner Stunde einige Code Beispiele für verschiedene Dinge geschrieben. Eins war wie man Strings verarbeiten kann, was man mit Arrays anstellen kann und noch so paar Allgemeine Sachen zur Vererbung und Klassen. Man sollte das hier nicht unbedingt als Tutorial sehen da ich euch eigentlich hier einfach nur Code reinhau den ihr direkt Ausführen könnt wenn ihr...
Hilfe in Info mit Arrays via Java
12/03/2009 - General Coding - 9 Replies
Heho,ich sitz grad hilflos in Info. Kann mir wer mit dieser Aufgabenstellung helfen? Berechnen Sie die Fakultät bis 10! und speichern Sie sie in einem Array. (Unter 5! gesprochen "Fünf Fakultät", versteht man als 1*2*3*4*5=120. Es wird definiert: 0! = 1) wär nett, lg



All times are GMT +2. The time now is 20:28.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.