Simulation eines Fernsehers

Status
Nicht offen für weitere Antworten.

frau-u

Aktives Mitglied
Hi,

Ich hänge mal wieder an einer Übungsaufgabe fest:
es soll quasi ein Fernseher simuliert werden. alles ganz einfach, nur text-basiert, kein GUI.
Es soll möglich bzw. vorhanden sein:
- vorgegebene Menge an Speicherplätzen(30)
- Sender auf einem bestimmten Speicherplatz festlegen
- einen Speicherplatz hochschalten
- den Namen des gewählten Senders ausgeben

Ich habe mir gedacht, ich speichere die Sender in einem Array. Der Speicherplatz im Array entspricht dann auch dem Speicherplatz des Senders.
Jetzt habe ich folgenden Code geschrieben. Dabei ergibt sich allerdings das Problem, dass die Sender scheinbar nicht gespeichert bleiben (so vermute ich). Wenn ich mir einen bestimmten Speicherplatz im Array ausgeben lassen bekomme ich immer "null".
Kann mir jemand einen Tipp geben, wie ich das beheben kann?


Code:
class Sender {
	
	final int progs = 30;
	String prog[] = new String[progs];
	public int i;
	String name;
	
	//Konstruktor für Sender
	public Sender(String name, int i) {
		this.name = name;
		this.i = i;
		prog[i] = name;
	}
	
	//Konstruktor für die Auswahl eines Sendplatzes
	public Sender(int i) {
		this.i = i;
	}	
	
	//zappen - einen Speicherplatz nach oben
	public void zapp() {
		if (i == 29) {
			this.i = 1;		
		} else i = this.i + 1;
	}
	
	//Sender ausgeben
	public void sausg() {		
		System.out.println(prog[i]);
	}
		
	public static void main(String[] args) {		
		Sender ard = new Sender("ARD", 1);
		Sender zdf = new Sender("ZDF", 2);
		Sender wdr = new Sender("WDR", 3);		
		
		Sender wahl = new Sender(2);
		wahl.sausg();
				
	}	
}

Danke.
 
du erstellst 4 neue Objekte und willst im letzten die Ausgaben von allen 4ren haben??

falls du das so willst änder die Zeile mal

Code:
String prog[] = new String[progs]

zu
Code:
static String prog[] = new String[progs]

So wie du es hast, hat jede von den 4 Instanzen du hast, ein eigenes String Array (dh jedesmal mit null werten)

ist es aber static, so gibt es genaugesehen nur 1es davon und so sollte es gehen!!


Nachtrag: das musst auch ändern!

Code:
public static final int progs = 30;

finale Variablen kann man immer static und public machen!! is besser so, sodass man in static und pulbic funktionen auch auf diese zugreifen kann!
 
Mein Vorschlag geht noch ein bißchen weiter, denn es würde sich hier anbieten das Konzept noch leicht zu verbessern:

Man könnte sich eine Klasse Fernseher vorstellen, die lediglich die Daten zum Fernseher hält und eine Klasse Sender. Anstatt ausschließlich mit Konstruktoren zu arbeiten bietet es sich an, setter/getter-Methoden zu verwerden:

Code:
class Fernseher {
  private final int progs = 30;
  private Sender[] prog = new Sender[progs];
  private int gewaehltesProgramm;

  public Fernseher() {
  // ...
  }

  public void addSender(Sender s) {
    prog[s.getPosition()] = s;
  }

  public void zapp() {
    // ...
    gewaehltesProgramm++;
    // ...
  }

  public void setProg( int i ) {
    gewaehltesProgramm = i;
  }

  public void sausg() {
    System.out.println(prog[gewaehltesProgramm].getName());
 }


  public static void main(String[] args) {
    Fernseher f = new Fernseher();

    Sender ard = new Sender("ARD", 1);
    Sender zdf = new Sender("ZDF", 2);
    Sender wdr = new Sender("WDR", 3);

    f.addSender(ard);
    f.addSender(zdf);
    f.addSender(wdr);

    f.setProg(2);
    f.sausg();
  }
}

class Sender {
  private int i;
  private String name;

  public Sender(String name, int i) {
    this.name = name;
    this.i = i;
  }

  public int getPosition() {
    return i;
  }

  public String getName() {
    return name;
  }
}
 
also ich als TVuser würde aber auch gerne wieder zurückzappen können .. :bae:

@sky:
is aber eine gute lösungsmöglichkeit. würde ich unterstützen.

grüße ben.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben