brauche hilfe beim vervollständigen!

Status
Nicht offen für weitere Antworten.

Sp0rky

Mitglied
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!



Code:
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();
    }
  }
 
S

SlaterB

Gast
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)
 
S

SlaterB

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

trazzag

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

Sp0rky

Mitglied
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!
 
S

SlaterB

Gast
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

Mitglied
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 ?
 
S

SlaterB

Gast
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

Mitglied
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..
 
S

SlaterB

Gast
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
 
Status
Nicht offen für weitere Antworten.

Oben