|
You last visited: Today at 16:15
Advertisement
[Java] Array - Klassenmember(?)
Discussion on [Java] Array - Klassenmember(?) within the Java forum part of the Coders Den category.
12/28/2014, 18:06
|
#1
|
elite*gold: 13
Join Date: Nov 2014
Posts: 71
Received Thanks: 4
|
[Java] Array - Klassenmember(?)
Hey,
Ich habe folgendes Problem und zwar soll ich zwei Klassen schreiben.
Einmal eine "Singer" und einmal eine "Coach" Klasse. Beide Klassen haben ihre Attribute und Methoden.
Nun soll ich der Coach Klasse eine Methode hinzufügen, mit der es möglich ist, Sänger (also Objekte von Singer) einem Array vom Typ Singer (Singer[] s = new Singer[x - Länge]) hinzuzufügen, sodass man das Array durchgehen kann und alle Sänger findet, welche dem gleichen Coach zugeordnet sind.
Dieses Array soll sich in der Coach Klasse befinden.
Mein Ansatz sieht derzeit, wie folgt aus:
[ COACH - Klasse]
Code:
public void select(Singer s) throws Exception{
this.s = s;
s.setCoach(this);
NumberOfObjekts++;
}
public void ausgabe()
{
System.out.println("Der Coach: " + Name + " hat " + NumberOfObjekts + " Sänger!" + " \nMit den Namen: ");
//for(Singer t: singer) System.out.print(t.getName());
}
Mit der Select Methode soll es möglich sein, neue Sänger in das Team
(Array von Singer) aufzunehmen.
[ Singer - Klasse]
Code:
public void setCoach(Coach c) throws Exception{
if(this.c == null) this.c = c;
else
throw new Exception("Der Coach darf nicht überschrieben werden!");
}
Bei der Select Klasse hänge ich jetzt, soweit ich weiß kann ich nicht einfach was wie:
Code:
public void select(Singer s) throws Exception{
this.s = s;
s.setCoach(this);
NumberOfObjekts++;
singer = new Singer[NumberOfObjekts];
singer[NumberOfObjekts - 1] = s;
}
machen. Aber wie gehe ich alternativ an das Problem heran?
In der Klasse Coach habe ich bereits ein Singer Array singer angelegt.
Ich wusste nicht genau, wie man diese Beziehungen nennt.
Kann mir Jemand bei dem Problem helfen?
Wäre demjenigen sehr dankbar!
LG
The_Dentist!
€DIT: Hat sich erledigt, Lösung des Problemes wurde gefunden!
|
|
|
12/28/2014, 18:29
|
#2
|
elite*gold: 0
Join Date: Jun 2010
Posts: 3,406
Received Thanks: 2,024
|
Wieso heißt deine Methode select? Wäre ein Name wie insert nicht passender?
Angenommen du hast deine Klasse Coach:
Code:
class Coach {
private Singer[] singer = new Singer[20];
public void insert(Singer s) {
int pos = getEmptyPos();
if(pos != -1) {
singer[pos] = s;
}
}
private int getEmptyPos() {
for (int i = 0; i < singer.length; i++) {
if(singer[i] == null) {
return i;
}
}
return -1; // array voll
}
}
So in etwa könnte das Einfügen aussehen. Ist allerdings ungetestet.
Dann könntest du sowas wie folgt machen:
Code:
Coach c = new Coach();
c.insert(new Singer());
Und dann für die Ausgabe eben das Array durchgehen.
Schöner wäre es natürlich mit einer Arraylist, aber ich nehme an, ihr müsst Arrays verwenden.
|
|
|
12/28/2014, 18:32
|
#3
|
elite*gold: 13
Join Date: Nov 2014
Posts: 71
Received Thanks: 4
|
Quote:
Originally Posted by NotEnoughForYou
Wieso heißt deine Methode select? Wäre ein Name wie insert nicht passender?
|
Aufgabenstellung...
Danke schon mal, ich versuche es gerade mal!
€dit:
Code:
public void ausgabe()
{
System.out.println("Der Coach: " + Name + " hat " + NumberOfObjekts + " Sänger!" + " \nMit den Namen: ");
for(Singer t: singer) if(t != null) System.out.print(t.getName());
}
[Main Klasse]
Code:
static Coach steffen;
static Singer marc;
public static void main(String[] args) throws Exception {
steffen = new Coach("Steffen");
marc = new Singer("Marc", 25, true, 100);
steffen.select(marc);
marc.ausgabe();
steffen.ausgabe();
}
Leider funktioniert die Ausgabe immer noch nicht, bekomme keine Ausgabe mit Namen. Das wundert mich allerdings, da der Wert singer[0] ungleich null ist. Eigentlich müsste er diesen doch ausgeben, oder?
So:
LG
|
|
|
12/28/2014, 19:24
|
#4
|
elite*gold: 0
Join Date: Jun 2010
Posts: 3,406
Received Thanks: 2,024
|
Zeig mal deinen ganzen Code.
Überschreiben doch lieber die toString Methode und gebe es über ein System.out.print aus, ist eleganter
|
|
|
12/28/2014, 19:44
|
#5
|
elite*gold: 13
Join Date: Nov 2014
Posts: 71
Received Thanks: 4
|
[Coach - Klasse]
Code:
public class Coach {
private String Name;
private Singer[] singer = new Singer[20];
private Singer s;
private int NumberOfObjekts = 0;
public String getName(){
return Name;
}
public Coach(String Name){
this.Name = Name;
}
public void select(Singer s) throws Exception{
int pos = getEmptyPos();
if(pos!= -1) {
singer[pos] = s;
s.setCoach(this);
NumberOfObjekts++;
}
}
private int getEmptyPos() {
for(int i = 0; i< singer.length; i++) {
if(singer[i] == null) {
return i;
}
}
return -1; // array voll
}
public void ausgabe()
{
System.out.println("######################################################################################################################################################################");
System.out.println("Der Coach: " + Name + " hat " + NumberOfObjekts + " Sänger!" + " \nMit den Namen: ");
for(Singer t: singer) if(t != null) System.out.print(t.getName());
System.out.println("######################################################################################################################################################################");
}
}
[Singer - Klasse]
Code:
public class Singer {
private final String Name;
private final int Alter;
private final boolean Geschlecht; // 1 = Mann, 0 = Frau
private final int Follower;
private Coach c;
/*
*
* @param Name
* @param Alter
* @param Geschlecht
* @param Follower
*/
public Singer(String Name, int Alter, boolean Geschlecht, int Follower){
this.Name = Name;
this.Alter = Alter;
this.Geschlecht = Geschlecht;
this.Follower = Follower;
}
public void setCoach(Coach c) throws Exception{
if(this.c == null) this.c = c;
else
throw new Exception("Der Coach darf nicht überschrieben werden!");
}
public Coach getCoach(){
return c;
}
public String getName(){
return Name;
}
public void ausgabe(){
if(getCoach() != null){
if(Geschlecht){
System.out.print("----------------------------------------------------------------------------------------------------------------------------------------------------------------------\n");
System.out.print("Ein Neuer männlicher Sänger mit folgenden Attributen wurde angelegt: " + Name + " " + Alter + " Follower: " + Follower + "\n\nSein Coach heißt: " + getCoach().getName() + "\n");
System.out.print("----------------------------------------------------------------------------------------------------------------------------------------------------------------------\n");
}
else{
System.out.print("----------------------------------------------------------------------------------------------------------------------------------------------------------------------\n");
System.out.print("Ein Neuer weiblicher Sänger mit folgenden Attributen wurde angelegt: " + Name + " " + Alter + " Follower: " + Follower + "\n\nIhr Coach heißt: " + getCoach().getName() + "\n");
System.out.print("----------------------------------------------------------------------------------------------------------------------------------------------------------------------\n");
}
}
else{
if(Geschlecht){
System.out.print("----------------------------------------------------------------------------------------------------------------------------------------------------------------------\n");
System.out.print("Ein Neuer männlicher Sänger mit folgenden Attributen wurde angelegt: " + Name + " " + Alter + " Follower: " + Follower + "\n\nEr hat noch keinen Coach " + "\n");
System.out.print("----------------------------------------------------------------------------------------------------------------------------------------------------------------------\n");
}
else{
System.out.print("----------------------------------------------------------------------------------------------------------------------------------------------------------------------\n");
System.out.print("Ein Neuer weiblicher Sänger mit folgenden Attributen wurde angelegt: " + Name + " " + Alter + " Follower: " + Follower + "\n\nSie hat noch keinen Coach " + "\n");
System.out.print("----------------------------------------------------------------------------------------------------------------------------------------------------------------------\n");
}
}
}
}
€dit: Leider immer noch keine Lösung.
|
|
|
12/29/2014, 20:59
|
#6
|
elite*gold: 20
Join Date: Jan 2009
Posts: 304
Received Thanks: 55
|
Ein normales Objektarray zu verwenden, wenn dynamisch viele Objekte hinzugefügt werden können ist unsinnig. Die Länge muss vorher festgelegt werden.
Jeder der dann einem mit ReDim-Funktionen kommt, "scheißt" ja ganz schön auf Performance...
0815-Lösung fürs Listing wäre:
Code:
private ArrayList<Singer> customers = new ArrayList<>();
public List<Singer> getAllSingers() {
return customers;
}
public void addSinger(Singer s) {
customers.add(s);
}
Was bereits angesprochen wurde ist die Überschreibung der toString Methode. Jede Klasse erbt standardmäßig in Java von der Klasse Objekt, mein ich. Dort gibt es eine toString Methode. Default mäßig gibt die Klasse über toString einen String der das Objekt serialisiert (meist nutzlos) darstellt.
Also zum Überschreiben der Methode ist @Override wichtig.
Implementiere also nun folgendes in deine Coach-Klasse:
Code:
@Override
public String toString() {
StringBuilder sb = new StringBuilder(coachName); // stringbuilder ist deutlich schneller (besseres stringhandling)
sb.append(" hat folgende Kunden: ");
for(Singer s : customers) {
sb.append("\n");
sb.append(s.getName()); // oder toString Methode von Singer
}
sb.append("Weiterer Text...");
return sb.toString();
}
Das wäre der vollständige Workaround für diese Problematik.
Hoffe es hilft dir.
#edit:
Deine Main-Methode ist ja soweit immer das Gleiche.
Die Ausabe wäre nun jedoch nur noch:
Coach c = ...
System.out.println(c); // .toString wird automatisch aufgerufen (kann aber auch geschrieben werden, c.toString())
lg, Tim
|
|
|
12/31/2014, 01:38
|
#7
|
elite*gold: 0
Join Date: Jan 2012
Posts: 759
Received Thanks: 416
|
Das sind Hausaufgaben, und dafür darf er natürlich nicht den vollen Sprachumfang nutzen. Das mit einem Array zu lösen ist in der Praxis natürlich nicht gut, aber hier geht es darum, dass er es trotzdem auch damit lösen kann.
Analog darf er natürlich auch nicht toString() nutzen (bzw. muss wenn dann toString() in ausgabe() aufrufen), sondern muss sich an die Aufgabenstellung halten.
StringBuilder ist nicht schneller, bzw. die manuelle Konkatenation wird vom Compiler optimiert (und ggf. durch einen StringBuilder ersetzt).
"select" ist ein sinnvoller Name, weil ein Coach einen Singer beim Context für sein Team "auswählt".
|
|
|
 |
Similar Threads
|
[java] arbeiten mit einem array?
12/18/2014 - Java - 3 Replies
#solved <3
|
[Java] Array zusammengesetzt ausgeben ?
11/05/2014 - Java - 8 Replies
Hallo, Community.
Ich habe in meinem Code einen Array, mit verschiedenen Werten. Diesen möchte ich zusammengesetzt ausgeben lassen und auch verwenden können. Ausgeben lassen habe ich diesen so:
for(String x : array){
System.out.print(x);
}
So werden die einzelnen Werte aber nur aneinander angereiht, und ich kann die ganze Zusammensetzung nicht als Variable speichern bzw. benutzen.
|
JAVA problem array sorting
09/28/2012 - General Coding - 1 Replies
i use three arrays where in
System.out.println("Enter number of process: ");
int process = in.nextInt();
String name = new String;
int age = new int;
double income = new double;
bla bla bla so basically i used three arrays and a for loop and the outcome is this.
(note: this is a user input)
|
[Java] Problem mit Array
10/17/2011 - General Coding - 5 Replies
Hallo lieber User !
Ich habe hier ein Programm das ein Array mit Zufallszaheln befüllt, und es dann mit einer anderen Methode durch Beistriche trennt. Mein Problem liegt in der Testklasse, da er mir da zwar die Ziffern durch Beistriche trennt, diese aber nicht mehr zufällig sondern alle gleich sind.
z.b eingabe : 5 ausgabe : 1,1,1,1,1,
public class ArrayMethoden {
public static int zufallsArray (int anzahl) {
int a = new int;
|
java - switch -> case frage [array]
12/29/2010 - General Coding - 6 Replies
hey hey...
hab ein kleines problem, mit der switch - case abfrage mit nutzen von arrays...
switch (zuf){
case wetten:uebereinstimmungen = 1;break;
}
zeigt der mir nen fehler an , mit ner einfachen if-abfrage klappt es zwar, aber sieht mit switch-case sauberer aus, da es mehrere sind...
|
All times are GMT +2. The time now is 16:16.
|
|