Probleme mit Klassen...oder: Eine Uhr

hoppel61

Mitglied
Hallo zusammen,
ich soll ein Programm schreiben, welches ähnlich einer Uhr fungiert.
Also es gibt die Attribute sec. min und hour. Ich denke das erklärt sich von selbst. Dann gibt es zur Unterscheidung vormittag / nachmittag das Attribut flag (früh= true, abend= false). Die Uhr funktioniert also im 12 stunden Takt. Nach 12:59:59 kommt also 1:0:0. Dann gibt es einen Konstruktor, der die Werte initialisieren soll (dabei drauf achten 1<= hour <=12, usw.), eine Methode print, die die Zeit ausgibt (sie enthält einen Parameter country => ist der ''en'', so erscheint die zeit im 12-stunden vormat mit am oder pm hinten; ist er hingegen ''deu'' so erscheint die zeit im 24-studen format) und zu guter letzt ist noch die Methode takt enthalten (wird sie aufgerufen, ist eine sekunde vergangen und demzufolge müssen sich die werte ändern).

Nun habe ich das Rahmenprogramm vorgegeben:
Java:
public class Clock { 
int sec, min, hour; // Sekunden, Minuten, Stunden 
boolean flag; // true = am | false = pm 

// Parameter: s = Sekunde | m = Minute | h = Stunde | f = flag 
public Clock (int s, int m, int h, boolean f) { 
// Anweisungen siehe Aufgabenstellung 
} 

public void print (String country) { 
// Anweisungen siehe Aufgabenstellung 
} 

public void takt() { 
// Anweisung siehe Aufgabenstellung 
} 
}

Mein grundlegendes Problem ist, dass ich nichts mit Klassen anfangen kann. Ich weiß, dass es sie gibt, aber ich kann nicht mit ihnen umgehen. Folglich ist meine Programmierung so als gäbe es keine Klassen.
Ich weiß halt nicht wo
public void main(String args[])
hin muss oder was ich mit "this." anfangen soll. Mich würde auch interessieren, wo ich nun eigtl die Werte initialisieren muss. Noch in der Haupt/Überklasse oder in irgendeiner Unterklasse?
Ich bedanke mich schon mal für die Hilfe 🙂
Hier mein (e Idee? ) :
Java:
public class Clock {
public static void main(String args[]) {
    int sec, min, hour; 
    boolean flag; // true = am | false = pm   

    public Clock (int s, int m, int h, boolean f) {           
            if(this.s>=0 && this.s<=60) {
                this.sec=this.s;
            }else{
                System.out.println("Der Wert für Sekunden muss zwischen 0 und 59 liegen!");
               
            }
            if(this.m>=0 && this.m<=60) {
                this.min=this.m;
            }else{
                System.out.println("Der Wert für Minuten muss zwischen 0 und 59 liegen!");
               
            }
            if(this.h>=1 && this.h<=12) {
                this.hour=this.h;
            }else{
                System.out.println("Der Wert für Stunden muss zwischen 1 und 12 liegen!");
               
            }
            this.flag=this.f;
       
    }
    public void print (String country) {
        if(country.contains("de")) {
            if(flag==true) {
                System.out.println("Aktuelle Uhrzeit : "+hour+":"+min+":"+sec);
            }else{
                System.out.println("Aktuelle Uhrzeit : "+hour+12+":"+min+":"+sec);
            }
        }
        if(country.contains("en")) {
            if(flag==true) {
                System.out.println("Aktuelle Uhrzeit : "+hour+":"+min+":"+sec+" am");
            }else{
                System.out.println("Aktuelle Uhrzeit : "+hour+":"+min+":"+sec+" pm");
            }
        }
    }

    public void takt() {
    if(sec==59)  {
        sec=0;
        min++;
        if (min==60)  {
            min=0;
            hour++;
            if(  1==1 ) {
                if(hour%12==11) {
                    if(flag==true)  {
                        flag=false;
                        hour=0;
                    }else{flag=true;
                    hour=0;
                    }
                }else{hour++;}
            }else{
                if(hour==23) {
                    hour=0;
                }
            }
        }
    }}
}}
 
Zum Konstruktor:
this auf Parameter aufzureifen, dürfte nicht funktionieren, da sich this auf das aktuelle Objekt bezieht.

In deinen If-Abfragen für sec und min meinst du sicherlich "&& ... < 60" oder "&& ... <= 59"?
Die Werte initialisiert du in einer anderen Klasse oder du kannst die main auch in die Clock Klasse schreiben (macht man so aber eigentlich nicht).
In der main-Methode kannst bspw so was machen
Code:
Clock c1 = new Clock(5, 30, 30, true);
c1.print();

ich würde mir nochmal die takt-Methode angucken. Wieso fragst du 1==1 ab?
 
danke für die antworten 🙂
also 1==1 frag ich ab, weil ich noch nicht genau weiß, was da hin kommt und ich einfach was hinschreiben musste.
stimmt ich meinte <60 bei den ifs, danke 😉
und wie kann ich eine neue klasse machen, wo ich das initialisiere? einfach new class oder wie?

und nun zu dir, soloeco,
ich verstehe leider die erklärungen zu java nicht, da ich noch nie was mit programieren am hut hatte. ich muss bloß leider das modul belegen. wenn die website syntax und struktur gut und vor allem sehr leicht erklärt, schau ich mir das gern an, danke für den tipp 😉

lg
 
Also bei der takt Methode brauchst Du nur jeweils die kleinste Einheit erhöhen und bei Überschreitung, diese auf den Startwert zu setzen und mit der nächst höheren weitermachen.
Etwa so:
Code:
public void takt(){
    sec++;
    if( sec > 59 ){
        sec = 0;
        min++;
        if( min > 59 ){
            min = 0;
            hour++;
            if( hour > 12 ){
                hour = 1;
                flag = !flag;
            }
        }
    }
}
 
und wie kann ich eine neue klasse machen, wo ich das initialisiere? einfach new class oder wie?
Indem du eine neue Datei anlegst mit dem Namen deiner Klasse und der Dateieindnung ".java".

Beispiel Clock.java
Java:
public class Clock {
// die Attribute + die Methoden
}
In deiner main-Methode (kann ruhin in einer anderen Klasse stehen) erzeugst du dann ein Objekt dieser Klasse, so wie Kakabär es gezeigt hat, und rufst dessen Methoden auf.
 
Mit welchem Programm arbeitest du denn? Falls du mit eclipse, netbeans oder intellij (oder andere Programme) arbeitest, guck dir an, wie du Projekte und Klassen erstellst.

Falls du alles aus der Konsole machst, erstelle eine neue Klasse in einer neuen Datei (Textdatei, beim Speichern die Endung .txt durch .java ersetzen). Achte darauf, dass Editoren trotzdem die Endung .txt mitgeben, bspw Clock.java.txt. Dann im File Manager die Dateiendungen aktivieren und .txt löschen.
In der Konsole hangelst du dich zu deiner java-Datei und gibst javac deineJavaDatei.java ein, daraus wird ein Byte-Code erstellt (gleicher Name wie die java-Datei nur mit der Endung .class).
Danach führst du java deineJavaDatei (ohne Endung!) aus.

Eine Klasse, die deine Klasse Clock benutzt, könnte bspw. so aussehen:
Code:
public class ClockTester
{
    public static void main(String[] args)
    {
        Clock clock = new Clock(10, 10, 3, true);
        clock.print("de");
    }

}

Deine Klasse Clock sieht dabei so aus
Code:
public class Clock
{
    int sec, min, hour;

    boolean flag; // true = am | false = pm

    public Clock(int s, int m, int h, boolean f)
    {
        if (s >= 0 && s <= 60)
        {
            this.sec = s;
        }
        else
        {
            System.out.println("Der Wert für Sekunden muss zwischen 0 und 59 liegen!");

        }
        if (m >= 0 && m <= 60)
        {
            this.min = m;
        }
        else
        {
            System.out.println("Der Wert für Minuten muss zwischen 0 und 59 liegen!");

        }
        if (h >= 1 && h <= 12)
        {
            this.hour = h;
        }
        else
        {
            System.out.println("Der Wert für Stunden muss zwischen 1 und 12 liegen!");

        }
        this.flag = f;

    }

    public void print(String country)
    {
        if (country.contains("de"))
        {
            if (flag == true)
            {
                System.out.println("Aktuelle Uhrzeit : " + hour + ":" + min + ":" + sec);
            }
            else
            {
                System.out.println("Aktuelle Uhrzeit : " + hour + 12 + ":" + min + ":" + sec);
            }
        }
        if (country.contains("en"))
        {
            if (flag == true)
            {
                System.out.println("Aktuelle Uhrzeit : " + hour + ":" + min + ":" + sec + " am");
            }
            else
            {
                System.out.println("Aktuelle Uhrzeit : " + hour + ":" + min + ":" + sec + " pm");
            }
        }
    }

    public void takt()
    {
        if (sec == 59)
        {
            sec = 0;
            min++;
            if (min == 60)
            {
                min = 0;
                hour++;
                if (1 == 1)
                {
                    if (hour % 12 == 11)
                    {
                        if (flag == true)
                        {
                            flag = false;
                            hour = 0;
                        }
                        else
                        {
                            flag = true;
                            hour = 0;
                        }
                    }
                    else
                    {
                        hour++;
                    }
                }
                else
                {
                    if (hour == 23)
                    {
                        hour = 0;
                    }
                }
            }
        }
    }
}

Wie du siehst, hat deine Klasse jetzt keine main-Methode mehr.
Generell kannst du dir merken: In der main-Methode werden keine Methoden und keine Konstruktoren deklariert, sondern darin stehen nur Anweisungen (sollte für den Anfang als Richtlinie reichen).

Gehe mal bei der Methode takt() alle Möglichkeiten durch und du wirst sehen, dass du niemals in den Block
Code:
 if (hour == 23)
                    {
                        hour = 0;
                    }
treten wirst.

IDE

Falls du keine IDE (Entwicklungsumgebung) hast, würde ich dir zu einer raten. Welche du nimmst, ist generell egal und ist größtenteils Geschmackssache.
Eine IDE hilft dir, den Überblick über deine Projekte zu behalten und weißt dich während des Programmierens auf Fehler hin (bspw. this. bei Parametern oder Dead Code [Code, der niemals erreicht/ausgeführt wird]).
 
Zuletzt bearbeitet:
danke euch allen 🙂
also takt hab ich geändert, an clock sitz ich grad dran, weil ich erst verstehen will, was ich da mache 😉 und zu den frage:
was für ein programm? -> die frage versteh ich nicht, ich benutze java und konsole
ide -> nein habe ich nicht, wusste nicht dass es sowas gibt, klingt gut, ich google das 🙂
 
Also mit einer neuen Klasse in neuem Dokument konnte ich Uhrzeiten aufrufen 🙂
super vielen Dank euch allen.
geht das evtl. noch, dass zb statt 12:0:0 das angezeigt wird: 12:00:00. das fände ich dann schöner, da die uhrzeiten ja unter einander stehen...
aber es geht erst mal. ich mach das programm nur noch etwas kürzes
lg
 

Zurück
Oben