Проверьте, кто победит в конкурсе на 2 класса с помощью темы - PullRequest
0 голосов
/ 05 декабря 2018

так что попробуйте закончить мой HW, и одна вещь в мне пока не идет хорошо.в этой программе я использую 2 класса, это сжатие бега, я просто хочу объявить место игрока, который выиграл в конкурсе.

например: у нас есть 4 потока.если второй поток достигнет 100M последним, я хочу опубликовать сообщение о том, что он занял 4-е место.

класс гонщика:

    package assig1_2;
    public class Racer extends Thread{
    public static int globalid = 1;
    private int id;
    private int speed;
    private Track track;
    public Racer(int Speed,Track track) {
        this.speed = Speed;
        this.track = track;
        this.id = this.globalid;
        this.globalid++;
    }
    public void run() {
        go ();
    }
    void go () {
        this.track.setPriority(this.speed);
        for(int i=1; i<=10; i++) {

            System.out.println("runner " + this.id + " run " + i + " meters " );
            if (i == 10) {
                this.track.setPlace(id);
                System.out.println("Runner " + this.id + " finished " + track.getPlaceNumber() + track.getPlaceName() );

            }
        }

    }
  }

класс трассы:

   package assig1_2;

public class Track extends Thread {
    private int finishedRacers; 
    public String place;

    public void setPlace(int numOfPlace) {

        if (numOfPlace == 1) {
            this.finishedRacers = numOfPlace;
            this.place = "st";

        } else if (numOfPlace == 2) {
            this.finishedRacers = numOfPlace;
            this.place = "nd";

        } else if (numOfPlace == 3) {
            this.finishedRacers = numOfPlace;
            this.place = "rd";

        } else {
            this.finishedRacers = numOfPlace;
            this.place = "th";
        }


    }

    public int getPlaceNumber() {
        return this.finishedRacers;
    }

    public String getPlaceName() {
        return this.place;
    }

}

это глупая программа в нашем первом уроке, когда мы используем Thread.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

это главное.и мы не можем добавлять, чтобы что-то там изменить.

package assig1_2;

открытый класс assig1_2_main {

public static void main(String[] args){
    Track track = new Track();
    Racer racer1 = new Racer(10, track);
    Racer racer2 = new Racer(2, track);
    Racer racer3 = new Racer(3, track);
    Racer racer4 = new Racer(7, track);
    Thread t1 = new Thread(racer1);
    Thread t2 = new Thread(racer2);
    Thread t3 = new Thread(racer3);
    Thread t4 = new Thread(racer4);
    t1.start();
    t2.start();
    t3.start();
    t4.start();
}

}

0 голосов
/ 05 декабря 2018

Я сделал несколько изменений в вашей программе и представил AtomicInteger и ExecutorService.Не было внесено никаких изменений в Track Class.

public class Racer extends Thread {

private static AtomicInteger atomicInteger = new AtomicInteger(0);
private int id;
private int speed;
private Track track;

private Racer(){}

public Racer(int Speed, Track track) {
    this.speed = Speed;
    this.track = track;
}

public int getPosition(){
    return atomicInteger.incrementAndGet();
}

public static void main(String[] args) throws InterruptedException {
    ExecutorService service = null;
    service = Executors.newFixedThreadPool(4);
    for (int i = 1; i <= 4; i++) {
        service.execute(() -> {
            new Racer(1, new Track()).go();
        });
    }
    service.awaitTermination(3, TimeUnit.SECONDS);
    if (service != null) service.shutdown();
}

void go() {
    this.track.setPriority(this.speed);
    for (int i = 1; i <= 10; i++) {

        System.out.println("runner " + Thread.currentThread().getName().substring(7,15) + " run " + i + " meters ");
        if (i == 10) {
            this.track.setPlace(getPosition());
            System.out.println("Runner " + Thread.currentThread().getName().substring(7,15) + " finished " +track.getPlaceNumber() +" "+ track.getPlaceName() );
        }
    }
} }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...