# brauche hilfe beim vervollständigen!



## Sp0rky (4. Apr 2008)

Hallo.
Also Ich habe in dem Programm unten einen so genannten "Zaehlermotor".
Ich soll aber jetzt aus diesem 1 Motor 3 machen.
Der erste Motor soll aufwärts zählen in denen vom Programm vorgegebenen Grenzen.
Der zweite Motor soll abwärts zählen in denen vom Programm vorgegebenen Grenzen.
Der dritte Motor soll (a<b) genau b - a zufaellige Zahlen erstellen (ist nicht so dringend, könnte auch weggelassen werden).

Ich kann jetzt glaub ich irgendwie aus den Variablen "t1, t2, t3" diese 3 Motoren deklarieren, aber da bin ich mir nicht sicher.

Vielen dank schonmal für eure hilfe!




```
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

class Zaehlermotor extends Thread {
  private int von, nach, pause;
  private Label l;
  
  public Zaehlermotor(int von, int bis, int Pause, Label ll){
    this.von = von;
    nach = bis;
    this.pause = pause;
    l = ll;
  }
  
  public void run (){
    for (int i = von; i < nach; i++){
      l.setText(Integer.toString(i));
      try{
        this.sleep(pause);
      }
      catch (InterruptedException e){}
    }
  }
 }
  public class PZaehler extends Applet {
    private Label l1, l2, l3;
    private Button b1, b2, b3;
    private Zaehlmotor t1, t2, t3;
    
    public void init() {
      setLayout(new GridLayout(2,3));
      add(l1 = new Label());
      add(l2 = new Label());
      add(l3 = new Label());
      add(b1 = new Button("Stopp1"));
      add(b2 = new Button("Stopp2"));
      add(b3 = new Button("Stopp3"));
      
      b1.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          if (t1.isAlive() & b1.getLabel().equals("Stopp1")) {
            t1.suspend();
            b1.setLabel("Start0");
          }
          else if (t1.isAlive() & b1.getLabel().equals("Start0")){
            t1.resume();
            b1.setLabel("Stopp1");
          }
          else b1.setLabel("Ende");
        }
      });
      b2.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent e) {
          if (t2.isAlive() & b2.getLabel().equals("Stopp2")) {
            t2.suspend();
            b2.setLabel("Start1");
          }
          else if (t2.isAlive() & b2.getLabel().equals("Start1")){
            t2.resume();
            b2.setLabel("Stopp2");
          }
          else b2.setLabel("Ende");
        }
      });
      b2.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent e) {
          if (t3.isAlive() & b3.getLabel().equals("Stopp3")) {
            t3.suspend();
            b3.setLabel("Start2");
          }
          else if (t3.isAlive() & b3.getLabel().equals("Start2")){
            t3.resume();
            b3.setLabel("Stopp3");
          }
          else b3.setLabel("Ende");
        }
      });
      t1 = new Zaehlmotor (0, 400, 20, l1);
      t2 = new Zaehlmotor (0, 300, 30, l2);
      t3 = new Zaehlmotor (0, 200, 50, l3);
      t1.start();
      t2.start();
      t3.start();
    }
  }
```


----------



## SlaterB (5. Apr 2008)

tja, das Zählen steht mit der for-Schleife direkt im Code,
die Grenzen kannst du mit Parametern beeinflussen, die Zählrichtung nicht ganz so gut,
aber auch möglich, indem du +1 oder -1 als Paramter übergibst und diese Zahl dann addierst,
dann musst du noch die Endbedingung ändern, != statt < oder >,

oder du verwendest anderen Code zwischen dem du mit einem großen if/ else wechselst,
oder auch gleich unterschiedliche Thread-Klassen

das mit den Zufallszahlen habe ich noch nicht 100% verstanden,
wird sich mit viel Krampf vielleicht auch in die Schleife einbauen lassen
(entweder den Schleifenwert nehmen oder bei einem bestimmten Parameter eine Zufallszahl erzeugen)


----------



## Sp0rky (7. Apr 2008)

ok danke erstmal.. aber wie kann ich erstmal den einen zaehlermotor in sogesehn 3 aufteilen ???


----------



## SlaterB (7. Apr 2008)

z.B. so wie du es machst mit den unterschiedlichen Parametern,
es soll ja nicht aufgeteilt sondern 3 einzelne Motorenen bereit gestellt werden


----------



## trazzag (7. Apr 2008)

und kleiner Hinweis noch (bevor du's übersiehst): zu Beginn deiner Zeile 66 sollte sicher ein b3 statt b2 stehen, oder?!


----------



## Sp0rky (8. Apr 2008)

kann ich nich einfach bei dem action listener b1 so lassn ... weil dann zählt der ja hoch...
was muss ich denn beim action listener b2 ändern, damit der runterzählt ?...
und beim actionlistener b3 muss erstmal nichts gemacht werden, der ist erstmal unwichtig!


----------



## SlaterB (8. Apr 2008)

die ActionListener haben nix mit der Zählrichtung oder überhaupt mit der Funktion der Threads zu tun,
die halten sie nur an/ starten sie wieder


----------



## Sp0rky (8. Apr 2008)

und was hast dann damit zu tun wie der hochzählt oder runterzählt ?


----------



## Sp0rky (8. Apr 2008)

könntest du mir erklären (wenns geht für dumme ;D ) wie ich jetzt den 1 motor in 3 aufteile ? und wo ich z.b. sehe dass der bei dem jetzigen motor hochzählt und wie ich das in runterzählen machen kann ?


----------



## SlaterB (8. Apr 2008)

hochgezählt wird offensichtlich in

public void run (){ 
    for (int i = von; i < nach; i++){ 
...


wie du die Threads mit Parametern unterschiedlich arbeiten lassen kannst habe ich schon geschrieben,
am besten ist aber nach wie vor, drei unterschiedliche Thread-Klassen zu erstellen


----------



## Sp0rky (8. Apr 2008)

ja du meintest ich soll != statt <oder>... das versteh ich nicht!


----------



## Sp0rky (8. Apr 2008)

muss ich nicht eigentlich die ganze class zaehlermotor kopieren und in class zzaehlermotor 1 machen.. dann fast das gleiche.. nur dass der statt dem hochzählen eben runterzählt..


----------



## SlaterB (8. Apr 2008)

wenn du eine neue Klasse erstellen willst, dann Zaehlermotor kopieren, sind ja nur 15 Zeilen

> das versteh ich nicht!

ich meinte, dass du bei einer Parameter-Variante nicht i++; schreiben sollst in der Schleife
sondern i + changeValue

wobei changeValue +1 oder -1 sein kann je nach Richtung,

in dem Fall kann die Schleifen-Bedingung aber weger i < nach noch i > nach sein, 
denn du weißt ja nicht, welche Zahl initial größer ist,
daher muss es i != nach sein,
deine Nachfragen lassen aber schwer vermuten, dass das alles viel zu schwer für dich ist,

ich werde nicht weiter jede Einzelheit erklären


----------

