# JavaUhr



## BMo (22. Januar 2004)

Hi!
Ich lerne das erste Jahr Java und hab im Unterricht die Aufgabe bekommen eine digital Uhr zu programiern. 
War eigentlich kein Problem.
Nur soll Sie immer in der gleichen Zeile sich aktuallisieren.
Also Sekunden immer in der gleichen Zeile und das ohne Html und Applet also nur in Dos. 
Das ist mir ein ziemliches Rätsel!
Mir ist nur eingefallen, so viele System.print.outln();
zu machen, dass es immer wieder an der gleichen Stelle nur tiefer erscheint. Aber gibt bestimmt noch eine andere Lösung!
Des mit den System.print.... hab ich jetzt nicht gemacht in dem Code 
Siehe:

```
class digitalUhr2{

      int stunde,minute,sekunde;
      long Zahl,i;
      char beenden;

      Thread clockThread;              //für Schleife

      void zähler() {                  //Sekundenzähler

                               //Pause für 1Sekunde aus anderen Programmen von mir erdacht
           clockThread = new Thread();

           try {
               clockThread.sleep(1000);
               } catch (InterruptedException e){}
      }


      void uhrzeiteinlesen() {

           //Überschrift
           System.out.println( );
           System.out.println("Digitaluhr - zum Beenden [B] druecken." );
           System.out.println( );
           //Ende Überschrift

           System.out.println("Geben Sie die aktuell Uhrzeit ein" );
           System.out.print("Stunden: " );
           stunde=Tastatur.readint();

           System.out.print("Minuten: " );
           minute=Tastatur.readint();

           System.out.print("Sekunden:" );
           sekunde=Tastatur.readint();

     }

     void uhrzeit(){

          zähler();
          sekunde+=1;

          if (sekunde==60){
             sekunde=0;
             minute+=1;
          }

          if ( minute==60){
             minute=0;
             stunde+=1;
          }

          if ( stunde==24) {
             stunde=0;
          }
          if (stunde>24||minute>60||sekunde>60){
             System.out.println("Error" );
             stunde=0;
             minute=0;
             sekunde=0;
          }
     }
     void ausgabe(){

          if ( sekunde<=9&&minute<=9&&stunde<=9  ) {
          System.out.println("0"+stunde+":0"+minute+":0"+sekunde);
          }
          if ( sekunde<=9&&minute<=9&&stunde>=10 ) {
          System.out.println(stunde+":0"+minute+":0"+sekunde );
          }
          if ( sekunde<=9&&minute>=10&&stunde<=9 ) {
          System.out.println("0"+stunde+":"+minute+":0"+sekunde);
          }
          if ( sekunde<=9&&minute>=10&&stunde>=10) {
          System.out.println(stunde+":"+minute+":0"+sekunde);
          }
          if ( sekunde>=10&&minute<=9&&stunde<=9 ) {
          System.out.println("0"+stunde+":0"+minute+":"+sekunde);
          }
          if ( sekunde>=10&&minute<=9&&stunde>=10) {
          System.out.println(stunde+":0"+minute+":"+sekunde);
          }
          if ( sekunde>=10&&minute>=10&&stunde<=9) {
          System.out.println("0"+stunde+":"+minute+":"+sekunde);
          }
          if ( sekunde>=10&&minute>=10&&stunde>=10) {
          System.out.println(stunde+":"+minute+":"+sekunde);
          }
      }

      public static void main ( String[]args ) {  

             digitalUhr2 PCUhr=new digitalUhr2();

             PCUhr.uhrzeiteinlesen();

             do {

             PCUhr.uhrzeit();

             PCUhr.ausgabe();

            } while (PCUhr.beenden!='b');

      }

}
```


----------



## sDroid (22. Januar 2004)

Hallo,

wenn du System.out.print() an Stelle von System.out.print*ln*() 
verwendest, wird keine neue Zeile eingefügt, das Zeichen '\r' erzeugt einen "carriage return" (Wagenrücklauf), weitere Zeichen werden wieder am Anfang der  (selben) Zeile ausgegeben.

Mit 

```
System.out.print("\r"+stunde+":"+minute+":"+sekunde);
```
sollte es also funktionieren.

Auf die Eingabe der aktuellen Uhrzeit kannst du auch verzichten, die kannst du über die Klasse _java.util.Date_ oder _java.util.Calendar_ abfragen.

z.B.

```
Calendar cal = Calendar.getInstance();
    stunde= cal.get(Calendar.HOUR_OF_DAY);
    minute= cal.get(Calendar.MINUTE);
    sekunde= cal.get(Calendar.SECOND);
```

gruß
sDroid


----------



## BMo (24. Januar 2004)

Danke!  
Wie gesagt, ich lerne Java gerade und freu mich, dass ich wieder etwas kleines dazugelernt habe!
Danke auch für den Tip mit der Systemzeit! 
 ;-)


----------



## BMo (24. Januar 2004)

gut, klapt alles  
jetzt hab ich noch die Frage, wie ich das mit der Eingabe von "B" beenden kann. So hatte ich mir das gedacht. Aber wenn ich das Programm Tastatur.readchar(); aufrufe, dass uns unsere Lehrerin gegeben hat, dann wartet es immer erst auf eine Eingabe. Das Problem ist, wenn ich das jetzt in die do -while schleife einbaue, dann geht das Programm nicht mehr, weil es wartet, bis ich etwas eingegeben hab - logisch. Hab mit if und try rumprobiert, geht aber irgendwie nicht.


----------



## BMo (26. Januar 2004)

Also!
Wie geht das, dass ich in der Do-While Schleife durch eingabe von 'B' das programm beenden kann, ohne dass die Uhr aufhört zu ticken?
Hab heut meine Lehrerin gefragt, die weiß selbst nicht, wie das geht  
Will aber, dass wir es herausbekommen.


----------



## BMo (27. Januar 2004)

Hi!
Ich sitz jetzt seit 5Stunden rum und überlege, wie das geht.
Mein Programm sieht so aus:

```
import java.io.*;
import java.util.Calendar;     //Importiern der Systemzeit der Klasse  java.util.Calendar 

class digitalUhr4{

      int stunde,minute,sekunde;
      long Zahl,i;
      char beenden;

      Thread clockThread;              //für Schleife


      void zähler() {                  //Sekundenzähler

                                       //Pause für 1Sekunde aus anderen Programmen von mir erdacht
           clockThread = new Thread();

           try {
               clockThread.sleep(1000);
               } catch (InterruptedException e){}
      }


      void uhrzeiteinlesen() {

           //Überschrift
           System.out.println( );
           System.out.println("Digitaluhr - zum Beenden [B] druecken." );
           System.out.println( );
           //Ende Überschrift

           // zum einlesen der Systemzeit erklärt von einem Javaprofi
           Calendar cal = Calendar.getInstance(); 
                    stunde= cal.get(Calendar.HOUR_OF_DAY);
                    minute= cal.get(Calendar.MINUTE);
                    sekunde= cal.get(Calendar.SECOND);
 
     }

     void uhrzeit(){

          zähler();
          sekunde+=1;

          if (sekunde==60){
             sekunde=0;
             minute+=1;
          }

          if ( minute==60){
             minute=0;
             stunde+=1;
          }

          if ( stunde==24) {
             stunde=0;
          }
          if (stunde>24||minute>60||sekunde>60){
             System.out.println("Error" );
             stunde=0;
             minute=0;
             sekunde=0;
          }
     }
     void ausgabe(){

          if ( sekunde<=9&&minute<=9&&stunde<=9  ) {
          System.out.print("\r0"+stunde+":0"+minute+":0"+sekunde);
          }
          if ( sekunde<=9&&minute<=9&&stunde>=10 ) {
          System.out.print("\r"+stunde+":0"+minute+":0"+sekunde );
          }
          if ( sekunde<=9&&minute>=10&&stunde<=9 ) {
          System.out.print("\r0"+stunde+":"+minute+":0"+sekunde);
          }
          if ( sekunde<=9&&minute>=10&&stunde>=10) {
          System.out.print("\r"+stunde+":"+minute+":0"+sekunde);
          }
          if ( sekunde>=10&&minute<=9&&stunde<=9 ) {
          System.out.print("\r0"+stunde+":0"+minute+":"+sekunde);
          }
          if ( sekunde>=10&&minute<=9&&stunde>=10) {
          System.out.print("\r"+stunde+":0"+minute+":"+sekunde);
          }
          if ( sekunde>=10&&minute>=10&&stunde<=9) {
          System.out.print("\r0"+stunde+":"+minute+":"+sekunde);
          }
          if ( sekunde>=10&&minute>=10&&stunde>=10) {
          System.out.print("\r"+stunde+":"+minute+":"+sekunde);
          }
      }

      public static void main ( String[]args ) {  

             digitalUhr4 PCUhr=new digitalUhr4();

             PCUhr.uhrzeiteinlesen();

             do {

             PCUhr.uhrzeit();

             PCUhr.ausgabe();

            } while (PCUhr.beenden!='b');

      }
       public static char readchar() {
    BufferedReader reader = new
      BufferedReader(new InputStreamReader(System.in));
    String line="";

    try {

      line=reader.readLine(); //Problemstelle hier wartet er immer bis ich was 
                                                 //eingegeben habe!

      if (line.length()>0) return line.charAt(0);
    }
    catch (Exception e) { System.out.println(e); }
    return ' ';
  }
}
```


HILFEEEE
Hab mich jetzt mit den BufferedReader etc. rumgeschlagen, aber blick überhaupt nichts.
Weiß jetzt wo die Problemstelle ist. Aber was kann ich da machen?
Irgendwie muss das doch gehen.
Dass er wenn ichts eingegeben wird, einfach weiter macht.


----------



## BMo (8. Februar 2004)

*Selbst hin bekommen!*

Ich hab mich jetzt durch dutzend Thread Tuturials durchgefressen. Jetzt geht es.


```
import java.util.Calendar;     //Importiern der Systemzeit aus der Klasse  java.util.Calendar
import java.io.*;               //Zum einlesen der Tastatur über BufferedReader und InputStreamReader

//_____________________________________________________________________________
//Abbruch Tread
class uhrbeender extends Thread{

     public static char beenden; //Ermöglicht dem Uhr Tread auch auf beenden zugreifen zu können

      public uhrbeender(String beendetUhr){

             super(beendetUhr);
      }

      public void run(){

          beenden=readchar();

          if (beenden!='B'){

             System.out.print("\r");

             uhr PCUhr = new uhr("2");
             PCUhr.run();       //Startet Uhr erneut

          }

          if (beenden=='B'){

                System.out.print("\rUhr Beendet" );

          }

     }


    public static char readchar() {                     //Einlesen über die Tastatur
    BufferedReader reader = new
      BufferedReader(new InputStreamReader(System.in));
    String line="";

    try {

      line=reader.readLine(); //Problemstelle!

      if (line.length()>0) return line.charAt(0);
    }
    catch (Exception e) { System.out.print("\r"+e); }
    return ' ';
  }
}

//_____________________________________________________________________________
//Uhr Thread


class uhr extends Thread{

      int stunde,minute,sekunde;

      Thread zählerThread;              //für 1 Sekundenpause


      public uhr(String uhrablauf){

             super(uhrablauf);
      }

      void uhrzeiteinlesen() {

           //Überschrift
           System.out.println( );
           System.out.println("Digitaluhr - zum Beenden [B] druecken." );
           System.out.println( );
           //Ende Überschrift

           // zum einlesen der Systemzeit
           Calendar cal = Calendar.getInstance(); 
                    stunde= cal.get(Calendar.HOUR_OF_DAY);
                    minute= cal.get(Calendar.MINUTE);
                    sekunde= cal.get(Calendar.SECOND);
 
      }

      void zähler() {                  //Sekundenzähler

           zählerThread = new Thread();

           try {
               zählerThread.sleep(1000);//Pause für 1Sekunde aus anderen Programmen von mir erdacht
               } catch (InterruptedException e){}
     }

     void uhrzeit(){

          zähler();
          sekunde+=1;

          if (sekunde==60){
             sekunde=0;
             minute+=1;
          }

          if ( minute==60){
             minute=0;
             stunde+=1;
          }

          if ( stunde==24) {
             stunde=0;
          }
          if (stunde>24||minute>60||sekunde>60){
             System.out.println("Error" );
             stunde=0;
             minute=0;
             sekunde=0;
          }
     }

     void ausgabe(){

          if ( sekunde<=9&&minute<=9&&stunde<=9  ) {
          System.out.print("\r0"+stunde+":0"+minute+":0"+sekunde);
          }
          if ( sekunde<=9&&minute<=9&&stunde>=10 ) {
          System.out.print("\r"+stunde+":0"+minute+":0"+sekunde );
          }
          if ( sekunde<=9&&minute>=10&&stunde<=9 ) {
          System.out.print("\r0"+stunde+":"+minute+":0"+sekunde);
          }
          if ( sekunde<=9&&minute>=10&&stunde>=10) {
          System.out.print("\r"+stunde+":"+minute+":0"+sekunde);
          }
          if ( sekunde>=10&&minute<=9&&stunde<=9 ) {
          System.out.print("\r0"+stunde+":0"+minute+":"+sekunde);
          }
          if ( sekunde>=10&&minute<=9&&stunde>=10) {
          System.out.print("\r"+stunde+":0"+minute+":"+sekunde);
          }
          if ( sekunde>=10&&minute>=10&&stunde<=9) {
          System.out.print("\r0"+stunde+":"+minute+":"+sekunde);
          }
          if ( sekunde>=10&&minute>=10&&stunde>=10) {
          System.out.print("\r"+stunde+":"+minute+":"+sekunde);
          }
      }

      public void schleife() {

           uhrzeit();
           ausgabe();

      }

      public void run(){

             uhrbeender UB =new uhrbeender("1");
             uhrzeiteinlesen();
             UB.start();           //Startet Abbruchthread
             do { 

                schleife();
  
             } while (UB.beenden!='B'  );
             System.out.print("\rUhr Beendet" );
      }

}
//_____________________________________________________________________________
//Hauptprogrmm

class digitalUhr6{

      public static void main ( String[]args ) {

             uhr PCUhr = new uhr("2");

             PCUhr.run();          //Startet Uhr


      }
}
```


Danke


----------

