Bildschirm-Programm

Feal

Mitglied
Hallo.

Es geht um folgende Aufgabe:

Gegeben sei die folgende Klasse (nur auszugsweise angegeben):

[Java]
public class Bildschirm
{...}

public Bildschirm(int xAufloesung, int yAufloesung)
{...}

public int anzahlBildpunkte()
{...}

public void loeschen(boolean invertieren)
{...}

Schreiben Sie einige Zeilen JAVA-Code, die ein Bildschirm-Objekt erzeugen
und dann seine Methode loeschen nur dann aufruft, wenn die Anzahl der Bildpunkte
größer als 2 Millionen ist.[/code]

Ich bin soweit:

Java:
public class Bildschirm
{

    private int xAufloesung;
    private int yAufloesung;
    private int punkte;
    private boolean invertieren;
    
    public Bildschirm(int xAufloesung, int yAufloesung)
    {
        this.xAufloesung = xAufloesung;
        this.yAufloesung = yAufloesung;
        this.invertieren = invertieren;
    }
    
    public int anzahlBildpunkte()
    {
        punkte = xAufloesung * yAufloesung;
        
        if(punkte <= 2000000)
        {
            invertieren = false;
            return punkte;
        }
        else
        { 
            invertieren = true;
            xAufloesung.loeschen();
            yAufloesung.loeschen();
            return punkte;
        }
    }

    public void loeschen(boolean invertieren)
    {
      xAufloesung = 0;
      yAufloesung = 0;
    }    

}


Ich will also, dass in der Methode anzahlBildpunkte() die Methode loeschen(boolean invertieren) aufgerufen wird, falls die Bildpunkt > 2.Mio.

Leider ist es mir nicht ganz klar, wie das mit dem boolean zu verstehen ist. Ich muss es irgendwie schaffen, für <2 Mio true an loeschen auszusenden und die Methode dann nicht aufzurufen und vice versa. Das ist meine Idee. Leider komme ich aber nicht weiter.

Ich freue mich auf euer Feedback.

Lg
 
Zuletzt bearbeitet von einem Moderator:
Okay. Ich habe es glaube gelöst. Jedoch bin ich mir nicht sicher, ob das im Sinne der Aufgabe war.

Hier das Stück veränderter Code:

Java:
public int anzahlBildpunkte()
    {
        punkte = xAufloesung * yAufloesung;
        
        if(punkte <= 2000000)
        {
           
            return punkte;
        }
        else
        { 
            
            loeschen(true);
            return punkte;
        }
    }

    public void loeschen(boolean invertieren)
    {
      xAufloesung = 0;
      yAufloesung = 0;
      System.out.println("Unzulässige Auflösung");
    }
 
Zuletzt bearbeitet:
Das "boolean" macht keinen Sinn, würde aber funktionieren.

Die Methode loeschen wird nur dann aufgerufen wenn "else" greift. Soweit so gut. Der boolean ist dabei völlig unwichtig und hat keinerlei Auswirkungen auf den Programmablauf.

Zusätzlich würdest du auch bei punkte > 2 Millionen die Auflösung auf 0x0 setzen aber die alten Punkte returnen.
 
anzahlBildpunkte() sollte genau das machen, was die Methode mit ihrem Namen auch aussagt, die Punkte berechnen und zurückgeben,
auf keinen Fall eine andere Methode aufrufen!,
das macht der Aufrufer, der sich den Rückgabewert von anzahlBildpunkte() anschaut,

soweit ich das verstehe soll dann auch die zweite Methode aufgerufen werden oder nicht, von Parameter true/false steht da nichts,
das Klassenattribut invertieren in der Klasse Bildschirm kann komplett weg
 
Also ich hab Invertieren komplett aus dem Code herausgenommen. Das ist auch logisch.

Allerdings verstehe ich deine Aussage, dass ich in der Methode anzahlBildpunkte im else-Zweig nicht loeschen aufrufen soll, nicht ganz ???:L. Es geht in dem Kapitel des Buches nämlich genau darum: Externe und Interne Methodenaufrufe. Es stand auch ein ähnliches Beispiel in dem das genau so praktiziert wurde.

Standpunkt:

[Java]

public class Bildschirm
{

private int xAufloesung;
private int yAufloesung;
private int punkte;

public Bildschirm(int xAufloesung, int yAufloesung)
{
this.xAufloesung = xAufloesung;
this.yAufloesung = yAufloesung;
}

public int anzahlBildpunkte()
{
punkte = xAufloesung * yAufloesung;

if(punkte <= 2000000)
{
return punkte;
}
else
{

loeschen(true);
return punkte;
}
}

public void loeschen(boolean invertieren)
{
xAufloesung = 0;
yAufloesung = 0;
System.out.println("Unzulässige Auflösung");
}

}
[/code]

Hinweis zur Aufgabenstellung:

Kümmern Sie sich nicht darum, ob das logisch ist - das Ziel ist lediglich, dass etwas syntaktisch Korrektes aufgeschrieben wird, also etwas, das sich von einem Compiler übersetzen lassen könnte.
 
Zuletzt bearbeitet:
Du kannst auch den Parameter aus der loeschen-Methode rausnehmen.

Du nutzt ihn nämlich innerhalb dieser Methode überhaupt nicht. Wenn du mit Eclipse entwickelst würde er dir das auch anzeigen. Das soll nicht heißen, dass man nicht mit einem Editor o.ä. starten sollte.
 
der Parameter ist vorgegeben, den kann man nicht so einfach entfernen,
ich erinnere dringend erneut daran, in anzahlBildpunkte() nicht loeschen() aufzurufen, das ist in jedem Fall falsch und ganz schlechtes Design,

man muss die Aufgabe korrekt lesen: 'der Code der das Objekt erzeugt soll loeschen() aufrufen wenn [..]'
 
Stimmt, dann sollte er aber doch auch irgendwie interpretiert werden.

edit: Du denkst nicht OO. Das Objekt kann irgendwann vll. mehr als 2Mio. Bildpunkte aufweisen. Eine Methode im Konstruktor wird nur 1x aufgerufen. Was, wenn sich das Objekt später ändert?
 
@Feal
nein, wieso willst du den Aufruf unbedingt irgendwo in dieser Klasse unterbringen?
die Erzeugung des Objektes und der Aufruf von anzahlBildpunkte() finden dort (bisher) doch auch nicht statt

die Klasse bietet ihre Konstruktoren und Methoden nur an,
JEMAND ANDERS, z.B. eine main-Methode, falls dir das was sagt, arbeitet dann, erstellt Objekte, ruft Methoden auf usw.
 
Ich komme doch nicht weiter.

Es sollen also 2 Klassen sein, ja?

Klasse2 beinhaltet alle Methoden die ich gegeben habe.

Klasse1 greift auf die Methoden von Klasse1 zu und erstellt ein Objekt, allerdings nur dann, wenn anzahlBildpunkte() < 2 Mio ist?

Dazu bräuchte ich doch ne weitere Methode. Wo genau muss die If-Anweisung hin? 🙁
 
Immernoch nicht OO.

Klasse1 = Bildschirm <-- ist völlig passiv und bietet nur Methoden an

Klasse2 = main <--- erstellt Objekt = Instanz von Klasse Bildschirm, ruft Methoden auf diesem Objekt auf, reagiert auf Rückgaben des Objekts und und und.
 
meine Güte,
nun hast du zumindest so viel darüber nachgedacht, da kann man den Rest auch verraten:
wo du das programmierst ist mir egal, ist sogar der Aufgabe egal, da steht ja nur 'schreiben sie ein paar Zeilen Code',
Java:
Bildschirm b = new Bildschirm(42,42); // Werte anscheinden egal
if (b.anzahlBildpunkte() > 2000000) {
 b.loeschen(true);
}
fertig
 
Oder zur vollständigen Verwirrung

Java:
Bildschirm b = new Bildschirm(42,42); // Werte anscheinden egal
if (b.anzahlBildpunkte() > 2000000) {
 b.loeschen(false);
}

😛
 
Wenn ich versuche den Code einzubedden kommt folgende Fehlermeldung:

anzahlBildpunkte(int,int) in Bildschirm cannot be applied to ()

Hmm.
 
die Fehlermeldung klingt aber gar nicht nach fehlenden Objekt, sondern als hätte anzahlBildpunkte() in Bildschirm zwei Parameter,
das passt nicht zum Code im ersten Posting
 

Zurück
Oben