Digitaluhr nach Systemzeit

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Digitaluhr nach Systemzeit

    hiho
    ich hab ein problem mit der systemzeit. also mein vorhaben ist folgendes:
    ich habe eine digitale uhr, die im moment nur als counter funktoiniert. jetzt will ich die aber zu ner uhr umfunktionieren, die nach der systemzeit läuft.
    jetzt weiß ich aber nicht, wie ich an die einzelnen werte der uhrzeit kommen soll, weil ich für jede ziffer die zahl extra einstellen muss.
    an das aktuelle datum komm ich ja durch

    Quellcode

    1. Date date = new Date();

    mit den (leider als deprecated markierten) methoden

    Quellcode

    1. date.getHours();date.getMinutes();date.getSeconds();

    komm ich an den aktuellen stunden, minuten und sekundenwert dran.
    jetzt muss ich es allerdings schaffen, jede ziffer einzeln zu bekommen.
    wenn die uhrzeit z.b. 23:43:21 ist, brauche ich die stunden nicht als 23, sondern als 2 und 3.
    meine idee war, die zahlen einfach in einen string zu packen, so dass ich jeden wert einzeln durch

    Quellcode

    1. string.charAt(int position);

    hohlen kann.
    aber wie soll ich int in string konvertieren?!? ich bekomm dann immer fehlermeldungen wie icompatible types und dass das nicht konvertierbar ist -.-
    kann mir wer weiterhelfen, oder ne bessere möglichkeit finden? der code der uhr ist dabei (die klasse Segment7 ist eig unwichtig, nur der vollständigkeit halber)

    Quellcode

    1. package PingPong;
    2. import javax.swing.*;
    3. import java.awt.event.*;
    4. import java.awt.*;
    5. /**
    6. * Write a description of class Clock here.
    7. *
    8. * @author (your name)
    9. * @version (a version number or a date)
    10. */
    11. public class Clock{
    12. public Thread th;
    13. public JPanel panel;
    14. public Segment7 ss1;
    15. public Segment7 ss2;
    16. public Segment7 sm1;
    17. public Segment7 sm2;
    18. public Segment7 sh1;
    19. public Segment7 sh2;
    20. public Clock(){
    21. }
    22. public JPanel fill(){
    23. panel = new JPanel();
    24. panel.setLayout(new FlowLayout(FlowLayout.CENTER));
    25. sh2 = new Segment7();
    26. panel.add(sh2);
    27. sh1 = new Segment7();
    28. panel.add(sh1);
    29. panel.add(new Panel());
    30. sm2 = new Segment7();
    31. panel.add(sm2);
    32. sm1 = new Segment7();
    33. panel.add(sm1);
    34. panel.add(new Panel());
    35. ss2 = new Segment7();
    36. panel.add(ss2);
    37. ss1 = new Segment7();
    38. panel.add(ss1);
    39. return panel;
    40. }
    41. public void count(){
    42. while(true){
    43. if(sh1.getValue() == 9){
    44. sh2.setValue(sh2.getValue() + 1);
    45. }
    46. if(ss1.getValue() == 9){
    47. if(ss2.getValue() == 5){
    48. if(sm1.getValue() == 9){
    49. if(sm2.getValue() == 5){
    50. sh1.setValue(sh1.getValue() + 1);
    51. sm2.setValue(0);
    52. sm1.setValue(0);
    53. ss2.setValue(0);
    54. ss1.setValue(0);
    55. sleep(1000);
    56. }
    57. }
    58. }
    59. }
    60. if(sm1.getValue() == 9){
    61. sm2.setValue(sm2.getValue() + 1);
    62. }
    63. if(ss1.getValue() == 9){
    64. if(ss2.getValue() == 5){
    65. sm1.setValue(sm1.getValue() + 1);
    66. ss2.setValue(0);
    67. ss1.setValue(0);
    68. sleep(1000);
    69. }
    70. }
    71. if(ss1.getValue() == 9){
    72. ss2.setValue(ss2.getValue() + 1);
    73. }
    74. ss1.setValue(ss1.getValue() + 1);
    75. sleep(1000);
    76. }
    77. }
    78. private void sleep(int millis){
    79. try{
    80. Thread.sleep(millis);
    81. }
    82. catch(InterruptedException e){
    83. System.err.println(e.toString());
    84. }
    85. }
    86. public void start(){
    87. th = new Thread(new ClockRunnable());
    88. th.start();
    89. }
    90. public static void main(String[] args){
    91. JFrame f = new JFrame("Clock");
    92. Container c = f.getContentPane();
    93. Clock cl = new Clock();
    94. c.add(cl.fill());
    95. f.pack();
    96. f.setVisible(true);
    97. cl.start();
    98. }
    99. class ClockRunnable implements Runnable{
    100. public void run(){
    101. count();
    102. }
    103. }
    104. }
    105. /**
    106. *
    107. *
    108. * @author JavaBook 33.2
    109. * @version 1.1
    110. */
    111. class Segment7 extends Canvas{
    112. private int digit;
    113. private boolean hasfocus;
    114. private int[][] polysx = {
    115. { 1, 2, 8, 9, 8, 2}, //Segment 0
    116. { 9,10,10, 9, 8, 8}, //Segment 1
    117. { 9,10,10, 9, 8, 8}, //Segment 2
    118. { 1, 2, 8, 9, 8, 2}, //Segment 3
    119. { 1, 2, 2, 1, 0, 0}, //Segment 4
    120. { 1, 2, 2, 1, 0, 0}, //Segment 5
    121. { 1, 2, 8, 9, 8, 2}, //Segment 6
    122. };
    123. private int[][] polysy = {
    124. { 1, 0, 0, 1, 2, 2}, //Segment 0
    125. { 1, 2, 8, 9, 8, 2}, //Segment 1
    126. { 9,10,16,17,16,10}, //Segment 2
    127. {17,16,16,17,18,18}, //Segment 3
    128. { 9,10,16,17,16,10}, //Segment 4
    129. { 1, 2, 8, 9, 8, 2}, //Segment 5
    130. { 9, 8, 8, 9,10,10}, //Segment 6
    131. };
    132. private int[][] digits = {
    133. {1,1,1,1,1,1,0}, //Ziffer 0
    134. {0,1,1,0,0,0,0}, //Ziffer 1
    135. {1,1,0,1,1,0,1}, //Ziffer 2
    136. {1,1,1,1,0,0,1}, //Ziffer 3
    137. {0,1,1,0,0,1,1}, //Ziffer 4
    138. {1,0,1,1,0,1,1}, //Ziffer 5
    139. {1,0,1,1,1,1,1}, //Ziffer 6
    140. {1,1,1,0,0,0,0}, //Ziffer 7
    141. {1,1,1,1,1,1,1}, //Ziffer 8
    142. {1,1,1,1,0,1,1} //Ziffer 9
    143. };
    144. public Segment7()
    145. {
    146. this(0);
    147. }
    148. public Segment7(int digit)
    149. {
    150. super();
    151. this.digit = digit;
    152. this.hasfocus = false;
    153. }
    154. public Dimension getPreferredSize()
    155. {
    156. return new Dimension(5*10,5*18);
    157. }
    158. public Dimension getMaximumSize()
    159. {
    160. return new Dimension(5*10,5*18);
    161. }
    162. public Dimension getMinimumSize()
    163. {
    164. return new Dimension(1*10,1*18);
    165. }
    166. public void paint(Graphics g)
    167. {
    168. Color darkblue = new Color(0,0,100);
    169. Color lightblue = new Color(0,0,255);
    170. //dx und dy berechnen
    171. int dx = getSize().width / 10;
    172. int dy = getSize().height / 18;
    173. //Hintergrund
    174. g.setColor(darkblue);
    175. g.fillRect(0,0,getSize().width,getSize().height);
    176. //Segmente
    177. g.setColor(lightblue);
    178. for (int i=0; i < 7; ++i) { //alle Segmente
    179. if (digits[digit][i] == 1) {
    180. Polygon poly = new Polygon();
    181. for (int j = 0; j < 6; ++j) { //alle Eckpunkte
    182. poly.addPoint(dx*polysx[i][j],dy*polysy[i][j]);
    183. }
    184. g.fillPolygon(poly);
    185. }
    186. }
    187. //Trennlinien
    188. g.setColor(darkblue);
    189. g.drawLine(0,0,dx*10,dy*10);
    190. g.drawLine(0,8*dy,10*dx,18*dy);
    191. g.drawLine(0,10*dy,10*dx,0);
    192. g.drawLine(0,18*dy,10*dx,8*dy);
    193. }
    194. public int getValue()
    195. {
    196. return digit;
    197. }
    198. public void setValue(int value)
    199. {
    200. digit = value % 10;
    201. repaint();
    202. }
    203. }
    Alles anzeigen
    contest
    -- Ein Wettnewerb für Jugendliche Programmierer --
    Jeder Helfer ist willkommen ;)
  • also erstmal: Die Date-Methoden sind deprecated markiert, da man stattdessen die Calendar Klasse verwenden soll:

    Quellcode

    1. Calendar jetzt = GregorianCalendar.getInstance();

    und dann zugriff mit

    Quellcode

    1. jetzt.get(Calendar.HOUR_OF_DAY);
    2. jetzt.get(Calendar.MINUTE);

    usw.

    Und wie du an die einzlnen Ziffern einer Zahl kommst?

    Quellcode

    1. int zehner = zahl / 10;
    2. int einer = zahl % 10;

    gilt natürlich nur für Zahlen bis 100, aber das sollte bei Zeitangaben kein Problem darstellen ;)
  • hi
    jo danke, ich hab das jetzt entsprechend geändert und alles klappt. uhr läuft jetzt nach systemzeit, und das sogar ziemlich genau ;)
    aber bei so vielen if-verschachtelungen verliert man irgendwann den durchblick :(
    kann man das vllt auch einfacher machen? weil ich noch 3 dazu machen musste...
    mfg
    contest
    -- Ein Wettnewerb für Jugendliche Programmierer --
    Jeder Helfer ist willkommen ;)
  • Irgendwas schein ich falsch zu machen, ich brauch kein einziges if ;)

    Quellcode

    1. public void count()
    2. {
    3. while (true)
    4. {
    5. Calendar cal = GregorianCalendar.getInstance(Locale.getDefault());
    6. int h1 = cal.get(Calendar.HOUR_OF_DAY)%10;
    7. int h2 = cal.get(Calendar.HOUR_OF_DAY)/10;
    8. sh1.setValue(h1);
    9. sh2.setValue(h2);
    10. int m1 = cal.get(Calendar.MINUTE)%10;
    11. int m2 = cal.get(Calendar.MINUTE)/10;
    12. sm1.setValue(m1);
    13. sm2.setValue(m2);
    14. int s1 = cal.get(Calendar.SECOND)%10;
    15. int s2 = cal.get(Calendar.SECOND)/10;
    16. ss1.setValue(s1);
    17. ss2.setValue(s2);
    18. sleep(1000);
    19. }
    20. }
    Alles anzeigen


    schöne Grüße aus München
  • hm nagut, das is auch ne lösung :)
    habs mal reingebastelt und funktioniert einwandfrei^^
    jetzt muss ich das nur noch so machen, dass man beides verwenden kann, dann kann ich die uhr wahlweise auch als counter nutzen ;)
    kannste mir da vllt ein tipp geben, wie man das am einfachsten macht? ;)

    für beide arten von "zählen" ne methode oder wie? hab dazu ne variable systemTime eingebaut. wenn die true ist, wird nach systemzeit gezählt, wenn sie false ist, dient das ganze als stoppuhr.

    Quellcode

    1. import javax.swing.*;
    2. import java.awt.event.*;
    3. import java.awt.*;
    4. import java.util.*;
    5. /**
    6.  * Write a description of class Clock here.
    7.  * 
    8.  * @author (your name) 
    9.  * @version (a version number or a date)
    10.  */
    11. public class Clock{
    12.   public Thread th;
    13.   public JPanel panel;
    14.   public Segment7 ss1;
    15.   public Segment7 ss2;
    16.   public Segment7 sm1;
    17.   public Segment7 sm2;
    18.   public Segment7 sh1;
    19.   public Segment7 sh2;
    20.   private boolean systemTime;
    21.    
    22.    
    23.   public Clock(boolean systemTime){
    24.   this.systemTime = systemTime;
    25.   }
    26.    
    27.    
    28.   public JPanel fill(){
    29.   panel = new JPanel();
    30.    
    31.   panel.setLayout(new FlowLayout(FlowLayout.CENTER));
    32.    
    33.   sh2 = new Segment7(2);
    34.   panel.add(sh2);
    35.   sh1 = new Segment7(4);
    36.   panel.add(sh1);
    37.    
    38.   panel.add(new Panel());
    39.    
    40.   sm2 = new Segment7(5);
    41.   panel.add(sm2);
    42.   sm1 = new Segment7(9);
    43.   panel.add(sm1);
    44.    
    45.   panel.add(new Panel());
    46.    
    47.   ss2 = new Segment7(3);
    48.   panel.add(ss2);
    49.   ss1 = new Segment7(5);
    50.   panel.add(ss1);
    51.    
    52.   return panel;
    53.   }
    54.    
    55.    
    56.   public void tick(){
    57.    
    58.   while(systemTime == false){
    59.    
    60.   if(ss1.getValue() == 9){
    61.   if(ss2.getValue() == 5){
    62.   if(sm1.getValue() == 9){
    63.   if(sm2.getValue() == 5){
    64.   if(sh1.getValue() == 9){
    65.   sh2.setValue(sh2.getValue() + 1);
    66.   sh1.setValue(0);
    67.   sm2.setValue(0);
    68.   sm1.setValue(0);
    69.   ss2.setValue(0);
    70.   ss1.setValue(0);
    71.   sleep(1000);
    72.   }
    73.   }
    74.   }
    75.   }
    76.   }
    77.   if(ss1.getValue() == 9){
    78.   if(ss2.getValue() == 5){
    79.   if(sm1.getValue() == 9){
    80.   if(sm2.getValue() == 5){
    81.   sh1.setValue(sh1.getValue() + 1);
    82.   sm2.setValue(0);
    83.   sm1.setValue(0);
    84.   ss2.setValue(0);
    85.   ss1.setValue(0);
    86.   sleep(1000);
    87.   }
    88.   }
    89.   }
    90.   }
    91.    
    92.    
    93.   if(sm1.getValue() == 9){
    94.   if(ss2.getValue() == 5){
    95.   if(ss1.getValue() == 9){
    96.   sm2.setValue(sm2.getValue() + 1);
    97.   sm1.setValue(0);
    98.   ss2.setValue(0);
    99.   ss1.setValue(0);
    100.   sleep(1000);
    101.   }
    102.   }
    103.   }
    104.   if(ss1.getValue() == 9){
    105.   if(ss2.getValue() == 5){
    106.   sm1.setValue(sm1.getValue() + 1);
    107.   ss2.setValue(0);
    108.   ss1.setValue(0);
    109.   sleep(1000);
    110.   }
    111.   }
    112.    
    113.    
    114.   if(ss1.getValue() == 9){
    115.   ss2.setValue(ss2.getValue() + 1);
    116.   }
    117.   ss1.setValue(ss1.getValue() + 1);
    118.    
    119.   sleep(1000);
    120.    
    121.   }
    122.    
    123.    
    124.    
    125.   while(systemTime){
    126.   Calendar cal = GregorianCalendar.getInstance(Locale.getDefault());
    127.  
    128.   int h1 = cal.get(Calendar.HOUR_OF_DAY)%10;
    129.   int h2 = cal.get(Calendar.HOUR_OF_DAY)/10;
    130.    
    131.   sh1.setValue(h1);
    132.   sh2.setValue(h2);
    133.  
    134.   int m1 = cal.get(Calendar.MINUTE)%10;
    135.   int m2 = cal.get(Calendar.MINUTE)/10;
    136.  
    137.   sm1.setValue(m1);
    138.   sm2.setValue(m2);
    139.  
    140.   int s1 = cal.get(Calendar.SECOND)%10;
    141.   int s2 = cal.get(Calendar.SECOND)/10;
    142.  
    143.   ss1.setValue(s1);
    144.   ss2.setValue(s2);
    145.  
    146.   sleep(1000);
    147.   }
    148.    
    149.    
    150.    
    151.   }
    152.    
    153.    
    154.   private void sleep(int millis){
    155.   try{
    156.   Thread.sleep(millis);
    157.   }
    158.   catch(InterruptedException e){
    159.   System.err.println(e.toString());
    160.   }
    161.   }
    162.    
    163.   public void start(){
    164.   th = new Thread(new ClockRunnable());
    165.   th.start();
    166.   }
    167.    
    168.    
    169.   public void stop(){
    170.   th.interrupt();
    171.   }
    172.    
    173.    
    174.   public static void main(String[] args){
    175.   JFrame f = new JFrame("Clock");
    176.   Container c = f.getContentPane();
    177.   Clock cl = new Clock(true);
    178.   c.add(cl.fill());
    179.   f.pack();
    180.   f.setVisible(true);
    181.   cl.start();
    182.    
    183.   }
    184. }
    Alles anzeigen


    mfg
    contest
    -- Ein Wettnewerb für Jugendliche Programmierer --
    Jeder Helfer ist willkommen ;)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von DarthMaul ()

  • Klar kann ich dir da auch helfen. Machen wir mal wieder eine kleine Nachhilfestunde hier in Sachen Software-Design. Zerlegen wir mal dein Problem logisch. Also du willst deine Uhr die du gleichzeitig auch als Counter verwenden willst, die Darstellung soll gleich bleiben, aber die Logik soll änderbar sein. Ok dann bauen wir eine Komponente, die nur die Darstellung übernimmt. Dazu nehmen wir einfach deine Klasse Clock.

    So ganz in Ordnung ist sie zwar auch nicht, aber für unsere Zwecke reichts aus und wenn ich den Rest noch verbessern würde, führt das an dieser Stelle zu weit.

    Als erstes schmeiß mal den Thread und die beiden Methode die die Logik zum Zeitberechnen verwenden raus. Dafür kommt eine Methode setValues(int hours, int minutes, int seconds) rein.

    Quellcode

    1. public void setValues(int hours, int minutes, int seconds)
    2. {
    3. sh1.setValue(hours % 10);
    4. sh2.setValue(hours/10);
    5. sm1.setValue(minutes % 10);
    6. sm2.setValue(minutes/10);
    7. ss1.setValue(seconds % 10);
    8. ss2.setValue(seconds/10);
    9. }
    Alles anzeigen


    Soweit so gut, jetzt nimmt Clock irgendwelche Werte entgegen und stellt sie dar aber es ist ihr egal welche Werte das sind. Natürlich brauchen wir jetzt zwei Klassen für die Logik, einmal als Uhr und einmal als Counter.

    Zuerst mal die Uhr:

    Quellcode

    1. public class Uhr implements Runable
    2. {
    3. private Clock clock;
    4. public Uhr(Clock clock)
    5. {
    6. this.clock = clock;
    7. }
    8. public void run()
    9. {
    10. while(true)
    11. {
    12. Calendar cal = GregorianCalendar.getInstance();
    13. clock.setValues(cal.get(Calendar.HOUR_OF_DAY),cal.get(Calendar.MINUTE),cal.get(Calendar.SECOND));
    14. Thread.sleep(1000);
    15. }
    16. }
    17. }
    Alles anzeigen


    Ich verkürz den Code ein bisschen ist schon spät aber das Grundprinzip sollte klar werden. Als nächstes bauen wir den Counter:

    Quellcode

    1. public class Counter implements Runable
    2. {
    3. private Clock clock;
    4. private int seconds=0;
    5. public Counter(Clock clock)
    6. {
    7. this.clock = clock;
    8. }
    9. public void run()
    10. {
    11. while(true)
    12. {
    13. int s = seconds % 60;
    14. int h = seconds/(60*60);
    15. int m = seconds/60-h*60;
    16. clock.setValues(h,m,s);
    17. seconds++;
    18. Thread.sleep(1000);
    19. }
    20. }
    21. }
    Alles anzeigen


    Die Berechnung müsste stimmen aber da bin ich mir nicht 100% sicher, aber das ist ja auch nicht das Thema.

    So als letztes zur Verwendung des ganzen:

    Quellcode

    1. public class Test
    2. {
    3. public static void main(String[] args)
    4. {
    5. JFrame frame = new JFrame();
    6. Clock c1 = new Clock();
    7. Clock c2 = new Clock();
    8. JPanel cp1 = c1.fill();
    9. JPanel cp2 = c2.fill();
    10. frame.add(cp1, BorderLayout.NORTH);
    11. frame.add(cp2, BorderLayout.SOUTH);
    12. frame.pack();
    13. Thread uhrenThread = new Thread(new Uhr(c1));
    14. Thread counterThread = new Thread(new Counter(c2));
    15. uhrenThread.start();
    16. counterThread.start();
    17. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    18. frame.setVisible(true);
    19. }
    20. }
    Alles anzeigen


    Jetzt sind wir damit fertig. Das ganze läuft unter dem Begriff "Seperation of concerns" zu deutsch so viel wie Trennung von Zuständigkeit.

    Ich arbeite eigentlich immer so, dass ich mir zuerst überlege welche Beteiligte es bei einem Problem geben könnte, dabei denk ich eigentlich noch nicht mal in Klassen sondern stell mir vor, welche Aufgaben es gibt um ein Problem zu lösen und wie man dieses geschickt aufteilen könnte. Wenn der Schritt getan ist, ist der Rest dann relativ einfach; zuerst überleg ich wie die Teile sich gegenseitig verwenden und zwar sollten diese Berührungspunkte so schlank wie möglich sein. In dem Fall wäre es ungeschickt eine setHours(int h) setMinutes(int m) setSeconds(int s) zu machen, weil die Methoden eh immer in der gleichen Reihenfolge aufgerufen werden würden, also fass ich sie gleich zusammen.
    Der Rest ist reine Programmierarbeit und ab da recht unspannend. Dennoch ist es der wichtigste Teil des Ganzen: 1. Werd ich für das Ergebnis bezahlt und 2. macht es einen stolz wenn man sieht, dass das was man sich überlegt hat auch funktioniert.

    so genug für heute.
    mfg
  • wow cool^^
    vielen dank erst mal für die mühe :)
    das ist genau das, was wir in der schule immer nicht machen. da lernen wir alles mögliche an methoden und so, aber wie man hinterher sowas plant und konzipiert, ham wir so noch nie besprochen.
    einbauen werd ich da allerdings erst heut abend oder so, weil ich mittags weg bin ;)
    mfg
    contest
    -- Ein Wettnewerb für Jugendliche Programmierer --
    Jeder Helfer ist willkommen ;)
  • Naja es ist auch irgendwie verständlich, dass dein Lehrer dir "nur" die Methoden beibringt, ich will ja nicht kritisieren und ich weiß auch nicht auf welche Schule du gehst, aber ich geh mal davon aus, dass dein Lehrer selbst auch noch nicht professionell Software entwickelt hat. Das Ganze hat sehr viel mit Erfahrung zu tun und solche Sachen hab ich auch erst durch mein Studium gelernt. Richtig Gedanken darüber hab ich mir erst bei meiner Diplomarbeit gemacht. Aber seh es einfach so, du lernst jetzt in der Schule den Werkzeugkasten kennen, ein Bild wirst du auch nicht aufhängen können wenn dir keiner erklärt hat wie ein Hammer funktioniert.

    Aber eins ist mir noch aufgefallen. Die stop-Methode in deiner Uhr wird deine Uhr nicht stoppen. Thread#stop() ist zu Recht deprecated aber interrupt führt dich nicht zum Ziel. Interrupt holt Threads zurück die schlafen oder in einem wait-Block stecken aber stopt sie nicht. Es gibt einen Spruch dazu. "Threads sollten nicht gekillt, sondern in den Selbstmord getrieben werden."

    Das geht so: definiere eine boolean-Variable in deinem Runnable die true ist. Die Schleife die läuft lautet nicht mehr while(true) sondern prüft auf diese Variable. Dein Runnable bekommt noch eine Methode stop in der deine Variable auf false gesetzt wird.

    Quellcode

    1. public class Uhr implements Runnable
    2. {
    3. private boolean laeuft = true; //deine Variable zum stoppen
    4. ...
    5. public Uhr(Clock c)
    6. {
    7. ....
    8. }
    9. public void run()
    10. {
    11. while(laeuft) //hier wird geschaut ob die Uhr noch läuft
    12. {
    13. ...
    14. }
    15. }
    16. public void stop()
    17. {
    18. laeuft = false; //jetzt hört die Uhr auf zu laufen
    19. }
    20. }
    Alles anzeigen


    So ich hoffe du kommst nun zu deinem Ziel.

    mfg
  • ziel erreicht ;) noch mals danke.
    ja ok dass unsere lehrerein nicht professionell programmiert und deshalb nicht perfekt ist nehmich ihr auch nicht übel. aber sie will uns immer unterstützen (meinen freund und mich), weil wir den werkzeugkasten etwas besser kennen als die anderen :p nur wäre es halt schön wenn wir in solchen sachen unterstützung bekommen würden.
    aber jetzt klappt ja alles^^
    mfg
    contest
    -- Ein Wettnewerb für Jugendliche Programmierer --
    Jeder Helfer ist willkommen ;)