Hallo,
der unten angegebene Quellcode speichert Beziehungen von Kontakten untereinander
hierzu enthält die Klasse Kontakt eine LinkedList, welche Referenzen auf die Freunde eines Kontaktes speichert.
Einige Methoden waren schon gegeben, andere musste ich implementieren:
Methode zeigeFreunde(int nr) -> soll freunde des kontaktes (nr) ausgeben
Methode sucheNamen (String namen) -> soll alle kontakte mit gesuchtem namen ausgeben
Methode kenner() -> alle kontakte sortiert nach anzahl der freunde ausgeben
die methode sucheNamen funktioniert
bei zeigefreunde bekam ich als freund "null" raus, dann hab ich die methode geändert jetzt habe endlosschleife
kenner funktioniert auch nicht
ich weiß nicht wie ich die daten der freunde des kontakts ausgeben kann
ich seh auch nicht den fehler bei methode kenner
:bahnhof:
ich hoffe es kann mir jemand meine fehler erklären
der unten angegebene Quellcode speichert Beziehungen von Kontakten untereinander
hierzu enthält die Klasse Kontakt eine LinkedList, welche Referenzen auf die Freunde eines Kontaktes speichert.
Einige Methoden waren schon gegeben, andere musste ich implementieren:
Methode zeigeFreunde(int nr) -> soll freunde des kontaktes (nr) ausgeben
Methode sucheNamen (String namen) -> soll alle kontakte mit gesuchtem namen ausgeben
Methode kenner() -> alle kontakte sortiert nach anzahl der freunde ausgeben
Java:
// Importierung der EinAusRahmen-Klassen
import keb.*;
// Die Klasse LinkedList wird in diesem Programm mehrfach benötigt
import java.util.LinkedList;
/*
* Die Klasse Kontakt speichert alle Informationen
* die ein Kontakt in SEPAdress enthalten soll
*/
class Kontakt
{
// Der Name des Kontaktes
String name;
// Der Vorname des Kontaktes
String vorname;
// Die Strasse des Kontaktes
String strasse;
// Die Hausnummer des Kontaktes als String,
// damit auch Hausnummer wie 1b gespeichert w
// werden können
String hausnummer;
// Die Postleitzahl als Integer
int postleitzahl;
// Der Ort des Kontaktes
String ort;
// Die Liste der Freunde des Kontaktes
LinkedList freunde;
/*
* Der Konstruktor erzeugt ein Kontaktobjekt mit den
* Kontaktdaten die als Parameter übergeben werden.
*/
public Kontakt(String _name, String _vorname, String _strasse, String _hausnummer, int _postleitzahl, String _ort)
{
name=_name;
vorname=_vorname;
strasse=_strasse;
hausnummer=_hausnummer;
postleitzahl=_postleitzahl;
ort=_ort;
freunde=new LinkedList();
}
}
/*
* Die Klasse SEPAdress stellt die Hauptklasse mit
* allen notwendingen Funktionalitäten
*/
public class SEPAdress extends EinAusRahmen
{
public static SEPAdress sObj = null;
/*
* Die Startmethode von SEPAdress
*/
public static void main (String [] Aufrufparameter)
{
sObj = new SEPAdress();
if (Aufrufparameter.length == 1)
{
Anfang (sObj, "Willkommen bei SEP-Adress!", 30, 1, Aufrufparameter[0]);
}
else
{
Anfang (sObj, "Willkommen bei SEP-Adress!", 30, 1);
}
}
// In dieser LinkedList werden alle Adressen gespeichert.
LinkedList adressen=null;
/*
* Diese Methode kann dazu genutzt werden, dem Benutzer
* Hilfestellungen zu geben.
*/
public void Hilfe()
{
spAus ("Die Hilfe fuer SEPAdress steht ausschliesslich in\n");
spAus ("gedruckter Form zur Verfuegung.\n");
zeigeAus ("- Sorry -");
}
/*
* Diese Methode bearbeiten Anfragen an das System
*/
public void Antwort(String K)
{
// falls die LinkedList adressen noch nicht initialisiert
// wurde, wird dies jetzt getan.
if (adressen==null)
adressen=new LinkedList();
//
// Das Kommando loescheDatenbank leert die komplette Datenbank
//
if (Wort(1,1).equalsIgnoreCase("loescheDatenbank"))
{
adressen.clear();
zeigeAus("Datenbank wurde geloescht!!!");
}
//
// Kontakt <Nachname>, <Vorname>, <Strasse>, <Hausnummer>, <Postleitzahl>, <Ort>
//
else if (Wort(1,1).equalsIgnoreCase("kontakt"))
{
// Der Befehl kontakt kann nur dann korrekt bearbeitet werden, wenn er 6 Parameter
// oder Sätze enthält, bei weniger als 6 Parameter wird ein Fehler gemeldet,
// bei mehr als 6 Parametern wird die überflüssigen Parameter ignoriert.
if (SatzAnz()<6)
zeigeAus("Fehlerhafte Eingabe, zu wenig Paramter!");
else
{
// der Befehl substring(8) bei Satz(1) sorgt dafür, dass das
// Kommando kontakt abgeschnitten wird.
// Es würde ansonsten als Teil des Namen gespeichert.
// Die Methode .trim() sorgt dafür, dass in einem String führende
// und nachfolgende Leerzeichen gelöscht werden.
// aus " test " wird "test"
int plz = liesInt(5,1);
if (ungueltig())
zeigeAus("Die PLZ darf nur aus Ziffern bestehen!");
else
kontaktAnlegen(Satz(1).substring(8).trim(),Satz(2).trim(), Satz(3).trim(), Satz(4).trim(), liesInt(5,1), Satz(6).trim());
}
}
//
// Das Kommando: Freund <no>, <Freund>
//
else if (Wort(1,1).equalsIgnoreCase("freund"))
{
// prüfe, ob Nummern angegeben wurden.
int contact = liesInt(1,2);
int c_friend = liesInt(2,1);
if (ungueltig())
zeigeAus("Der Befehl 'freund' wurde mit einer fehlerhaften Syntax azfgerufen.");
else
freund(contact,c_friend);
}
//
// Das Kommando: Zeige <no>,
//
else if (Wort(1,1).equalsIgnoreCase("zeige"))
{
int no = liesInt(1,2);
if (ungueltig())
zeigeAus("Der Befehl 'zeige' wurde mit einer fehlerhaften Syntax aufgerufen.");
else
zeige(no);
}
//
//Das Kommando: zeigeFreunde <no>
//
else if(Wort(1,1).equalsIgnoreCase("zeigeFreunde"))
{
int no = liesInt(1,2);
if (ungueltig())
zeigeAus("Der Befehl 'zeigeFreunde' wurde mit einer fehlerhaften Syntax aufgerufen.");
else
zeigeFreunde(no);
}
//
//Das Kommando: sucheNamen <name>
//
else if(Wort(1,1).equalsIgnoreCase("sucheNamen"))
{
String name = Wort(1,2);
if(ungueltig())
zeigeAus("Der Befehl 'sucheNamen' wurde mit einer fehlerhaften Syntax aufgerufen.");
else
sucheNamen(name);
}
else if(Wort(1,1).equalsIgnoreCase("kenner"))
{
int anz=WortAnz(1);
if(ungueltig())
zeigeAus("Der Befehl 'kenner' wurde mit einer fehlerhaften Syntax aufgerufen.");
else
kenner();
}
else // Befehl wurde nicht erkannt
zeigeAus("Der Befehl "+K+" kann nicht verarbeitet werden!");
}
// -----------------------------------------------------------------------------------------
// Hilfsmethoden
// -----------------------------------------------------------------------------------------
/**
* Diese Methode liefert den Inhalt eines ganzen Satzes zurück
*/
public String Satz(int s)
{
if ((s < 1) | (s > SatzAnz()))
{
return null;
}
else
{
String satz="";
for (int i=1; i<= WortAnz(s); i++)
{
satz = satz.concat(" ").concat(Wort(s,i));
}
return satz;
}
}
/**
* Diese Methode liefert die aktuelle Anzahl an Kontakten,
* die das System zur Zeit gespeichert hat
*/
public int anzahlKontakte()
{
return adressen.size();
}
/**
* Diese Methode liefert die aktuelle Nummer des übergebenen
* Kontaktes k zurück. Fall k nicht in der Datenbank enthalten
* ist, wird automatisch -1 zurück gegeben.
*/
public int datensatzNummer(Kontakt k)
{
return adressen.indexOf(k);
}
/**
* Diese Methode fügt den Kontakt neu zu den bisherigen Kontakten
* hinzu
*/
public void fuegeKontaktEin(Kontakt neu)
{
adressen.add(neu);
}
/**
* Diese Methode gibt eine Refferenz auf den Kontakt mit der Nummer no
*/
public Kontakt holeKontakt(int no)
{
if ((no > anzahlKontakte()-1) | (no < 0) )
return null;
else return (Kontakt)adressen.get(no);
}
// -----------------------------------------------------------------------------------------
// Implementierung der Befehle
// -----------------------------------------------------------------------------------------
/*
* Implemtierung des Befehls Kontakt anlegen
* Die Methode geht davon aus, dass die übergebenen
* Parameter im richtigen Format vorliegen.
*/
public void kontaktAnlegen(String _name, String _vorname, String _strasse, String _hausnummer, int _postleitzahl, String _ort)
{
// Ein neues Kontakt-Objekt wird erzeugt.
Kontakt neu = new Kontakt(_name, _vorname, _strasse, _hausnummer, _postleitzahl, _ort);
// Den Kontakt mit der Hilfsmethode fuegeKontaktEin in den Speicher schreiben
fuegeKontaktEin(neu);
// Speicherung mit Meldung über Name, Vorname und no bestätigen
zeigeAus("Neuer Kontakt "+neu.name+", "+neu.vorname+" wurde gespeichert unter der Nummer "+datensatzNummer(neu));
}
/*
* Implementierung des Befehls Freund
*/
public void freund(int no, int freundNo)
{
if (no==freundNo)
{
zeigeAus("Es ist nicht angedacht, mit sich selbst befreundet zu sein!");
return;
}
Kontakt kontakt = holeKontakt(no);
// prüfe, ob der zu bearbeitende Kontakt
// überhaupt existiert.
if (kontakt!=null)
{
Kontakt freund = holeKontakt(freundNo);
//prüfe nun ob der zweite Kontakt existiert..
if (freund!=null)
{
// Beachte, dass eine LinkedList nur Objecte speichern kann,
// daher müssen wir den int freund in ein Integerobject umwandelm
// damit man es in der LinkedList speichern kann.
// ist der neue Freund schon in der Freundesliste?
if (kontakt.freunde.contains(freund))
{
// gib eine Fehlermeldung
zeigeAus("Kontakt "+kontakt.name+", "+kontakt.vorname+" ist schon mit "+freund.name+", "+freund.vorname+" befreundet");
}
else
{
// nun den neunen Freund in die Liste der Freunde aufnehmen
kontakt.freunde.add(freund);
zeigeAus("Kontakt "+kontakt.name+", "+kontakt.vorname+" hat einen neuen Freund: "+freund.name+", "+freund.vorname);
}
// Ende if(kontakt.freund.contains(...
}
else
{
zeigeAus("Der Kontakt mit der Nummer "+freundNo+" existiert nicht.");
} // ende if(holeKontakt(...
}
else
{
// Falls der Kontakt nicht existiert, gibt eine Fehlermeldung aus
zeigeAus("Der Kontakt mit der Nummer "+no+" existiert nicht.");
} // ende if(kontakt!=null)
}
/*
* Implementierung der Methode zeige(no)
*/
public void zeige(int no)
{
Kontakt kontakt = holeKontakt(no);
// prüfe, ob der zu bearbeitende Kontakt
// überhaupt existiert.
if (kontakt!=null)
{
zeigeAus("Kontakt Nummer "+no+": "
+kontakt.name+", "
+kontakt.vorname+"; "
+kontakt.strasse+" "
+kontakt.hausnummer+"; "
+kontakt.postleitzahl+" "
+kontakt.ort);
}
else
{
// Falls der Kontakt nicht existiert, gibt eine Fehlermeldung aus
zeigeAus("Der Kontakt mit der no "+no+" existiert nicht.");
} // ende if(kontakt!=null)
}
// Ab hier neuen Programmcode ergänzen
-------------------------------------------------------------------
//Implementierung der Methode zeige Freunde
// zeigt alle Freunde des Kontakts <nummer>
public void zeigeFreunde(int nr)
{
//Hole Kontakt mit der Nummer <nr>
Kontakt kontakt = holeKontakt(nr);
//Wenn der Kontakt existiert[/COLOR]
if(kontakt!= null)
{ //und wenn der Kontakt Freunde auf seiner Liste hat
//gebe diese Freunde aus
if(kontakt.freunde!=null)
{
for(int i=0; i<kontakt.freunde.size(); i++)
{
zeigeAus("Die Freundesliste von Kontakt"+nr+": "+"\n"+ kontakt.name+ ", "+kontakt.vorname+"\n"
+ (Kontakt)kontakt.freunde.get(i).name+"\n");
}
}
//andernfalls gib eine Fehlermeldung zurück
else
zeigeAus("Der Kontakt mit der nr "+nr+" hat keine Freunde auf seiner Liste.");
}
//Falls der Kontakt nicht existiert gib eine Fehlermeldung aus
else
zeigeAus("Der Kontakt mit der nr "+nr+" existiert nicht.");
}
//Implementierung der Methode sucheNamen <String>
public void sucheNamen(String name)
{
String ausgabe = "";
for (int i=0; i<adressen.size(); i++)
{
if(holeKontakt(i).name.equals(name))
ausgabe += "Kontakt Nummer "+i+": "
+holeKontakt(i).name+", "
+holeKontakt(i).vorname+"; "
+holeKontakt(i).strasse+" "
+holeKontakt(i).hausnummer+"; "
+holeKontakt(i).postleitzahl+" "
+holeKontakt(i).ort+"\n";
}
zeigeAus(ausgabe);
}
//Implemetierung der Methode kenner
public void kenner()
{
//Erstelle einen Array mit allen Kontakten
Kontakt [] rangliste = new Kontakt[anzahlKontakte()];
for(int i=0; i<adressen.size(); i++)
{
rangliste[i]=holeKontakt(i);
}
//Sortiere den Array der Kontakte nach Anzahl der Freunde
//damit eine Rangliste entsteht
//Wenn KontaktX mehr Freunde hat als andere Kontakte
//setze KontaktX an erster Stelle
Kontakt z= null;
for(int i=0; i<rangliste.length; i++)
{
for(int j=0; j<rangliste.length; j++)
{
if(rangliste[j].freunde.size()>rangliste[i].freunde.size())
z=rangliste[i];
rangliste[i]=rangliste[j];
rangliste[j]=z;
}
}
//Ausgabe der Rangliste
//Ausgabe von Anzahl der Freunde , Name und Vorname des Kontakts
int anzFreunde=0;
for (int k=0; k<rangliste.length; k++)
{
anzFreunde=rangliste[k].freunde.size();
zeigeAus(anzFreunde+" "+rangliste[k].name+","+rangliste[k].vorname+";"+"\n");
}
}[/COLOR]
} // Ende von public class SEPAdress
die methode sucheNamen funktioniert
bei zeigefreunde bekam ich als freund "null" raus, dann hab ich die methode geändert jetzt habe endlosschleife
kenner funktioniert auch nicht
ich weiß nicht wie ich die daten der freunde des kontakts ausgeben kann
ich seh auch nicht den fehler bei methode kenner
:bahnhof:
ich hoffe es kann mir jemand meine fehler erklären
Zuletzt bearbeitet von einem Moderator: