Avatar billede flashlyn Nybegynder
20. april 2007 - 16:02 Der er 1 kommentar

kan ikke stoppe sorteringen

hej jeg skal have stoppet sorteringen i en ballthread koden er

-----------------------------------------
public class BallThread extends Thread {

  private BallFactory factory;
  private BallStore store;
  private BallBuffer fromBuffer;
  private BallBuffer toBuffer;
  private int ballColor;
  private boolean finished;

  public BallThread(int ballColor, BallFactory factory, BallStore store, BallBuffer fromBuffer, BallBuffer toBuffer) {
    this.ballColor = ballColor;
    this.factory = factory;
    this.store = store;
    this.fromBuffer = fromBuffer;
    this.toBuffer = toBuffer;
    finished = false;
  }

  public void run() {
    int ball;
    try {
      while (!factory.isEmpty()) {
        if (!fromBuffer.isEmpty())
          ball = fromBuffer.decreaseBuffer();
        else
          ball = factory.generate();
        if (ball == ballColor)
          store.receive(ball);
        else
          toBuffer.increaseBuffer(ball);
      }
    } catch(Exception e) {
        e.printStackTrace();
    }

  }
}
-----------------------------------------
public class Balls {

  public static final int RED  =  0;
  public static final int WHITE =  1;
  public static final int BLUE  =  2;

  public static void main(String[] args) {
    BallFactory redFactory  = new BallFactory(100);
    BallFactory whiteFactory = new BallFactory(100);
    BallFactory blueFactory  = new BallFactory(100);

    BallStore redStore  = new BallStore("RED store");
    BallStore whiteStore = new BallStore("WHITE store");
    BallStore blueStore  = new BallStore("BLUE store");

    BallBuffer rwBuffer = new BallBuffer(10);
    BallBuffer wbBuffer = new BallBuffer(10);
    BallBuffer brBuffer = new BallBuffer(10);

    BallThread redThread = new BallThread(Balls.RED, redFactory, redStore, brBuffer, rwBuffer);
    BallThread whiteThread = new BallThread(Balls.WHITE, whiteFactory, whiteStore, rwBuffer, wbBuffer);
    BallThread blueThread = new BallThread(Balls.BLUE, blueFactory, blueStore, wbBuffer, brBuffer);

    redThread.start();
    whiteThread.start();
    blueThread.start();

    try {
      while (true) {
        Thread.sleep(1000);
        redStore.print();
        blueStore.print();
        whiteStore.print();
      }
    } catch (Exception e) {
      e.printStackTrace();
    }

  }
}
-----------------------------------------
import java.util.*;

public class BallFactory {

  private int number;
  private final int maxNumber;
  private Random random;

  public BallFactory(int maxNumber) {
    this.maxNumber = maxNumber;
    number = 0;
    random = new Random();
  }

  public boolean isEmpty() {
    return (number >= maxNumber);
  }

  public int generate() {
    number ++;
    return random.nextInt(3);
  }
}
---------------------------------------------
import java.util.*;

public class BallBuffer{

  private ArrayList buffer;
  private final int size;

  public BallBuffer(int size){
    this.size = size;
    buffer = new ArrayList();
  }

  public synchronized void increaseBuffer(int value) throws InterruptedException {
    while (buffer.size() >= size)
      wait();
    buffer.add(new Integer(value));
    notifyAll();
  }

  public synchronized int decreaseBuffer() throws InterruptedException {
    while( buffer.isEmpty() )
      wait();
    int value = ((Integer) buffer.get(0)).intValue();
    buffer.remove(0);
    notifyAll();
    return value;
  }

  public synchronized boolean isEmpty() {
    return buffer.isEmpty();
  }
}
-------------------------------------------------
public class BallStore {

  private int numberRed;
  private int numberWhite;
  private int numberBlue;
  private final String name;

  public BallStore(String name) {
    numberRed = 0;
    numberWhite = 0;
    numberBlue = 0;
    this.name = name;
  }

  public void receive(int x) {
    if (x == Balls.RED)
      numberRed++;
    if (x == Balls.WHITE)
      numberWhite++;
    if (x == Balls.BLUE)
      numberBlue++;
  }

  public void print() {
    System.out.println("The store named " + name + " contains:");
    System.out.println(numberRed + " red balls");
    System.out.println(numberWhite + " white balls");
    System.out.println(numberBlue + " blue balls");
    System.out.println();
  }
}
------------------------------------------------------------------
Avatar billede flashlyn Nybegynder
22. april 2007 - 12:37 #1
jeg skal havedet lavet sådan at den stopper eter 3 gennemgange rød hd o blåog de resterende ble hopper over i deres respetive bosrog kommer med en println hvor der står hormange der er blevet til overs og sat tilbage
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester