powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / В чем ошибка?
3 сообщений из 3, страница 1 из 1
В чем ошибка?
    #38376460
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В чем ошибка?

Выигрывает игрок , который первым выполнил все шаги из steps.
Сидоров выиграл, но не выводит, что он выиграл - почему условие не срабатывает?
Код: java
1.
if ( stepsDone == OnlineGame.steps.size() ) System.out.println (Thread.currentThread().getName() + ":" + "победитель!");



вывод:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Ivanov:Начало игры
Petrov:Начало игры
Sidorov:Начало игры
Sidorov stepsDone = 1
Sidorov:Сбор ресурсов
Ivanov:Сбор ресурсов
Sidorov stepsDone = 2
Sidorov:Рост экономики
Sidorov stepsDone = 3
Sidorov:Убийство врагов
Ivanov:Рост экономики
Sidorov stepsDone = 4
Ivanov:проиграл
Petrov:проиграл




Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
import java.util.ArrayList;
import java.util.List;

public class Solution {
    public static void main(String[] args) throws InterruptedException {
        OnlineGame onlineGame = new OnlineGame();
        onlineGame.start();
    }

    public static class OnlineGame extends Thread {
        public static volatile boolean isWinnerFound = false;

        public static List<String> steps = new ArrayList<String>();

        static {
            steps.add("Начало игры");
            steps.add("Сбор ресурсов");
            steps.add("Рост экономики");
            steps.add("Убийство врагов");
        }

        protected Gamer gamer1 = new Gamer("Ivanov", 3);
        protected Gamer gamer2 = new Gamer("Petrov", 1);
        protected Gamer gamer3 = new Gamer("Sidorov", 5);

        public void run() {
            gamer1.start();
            gamer2.start();
            gamer3.start();

            while (!isWinnerFound) {
            }
            gamer1.interrupt();
            gamer2.interrupt();
            gamer3.interrupt();
        }
    }

    public static class Gamer extends Thread {

		private int rating;

        public Gamer(String name, int rating) {
            super(name);
            this.rating = rating;
        }

        public void run() {
        	
        	int stepsDone = 0;
        	
        	try {
    	   		
        		for ( int i = 0; i < OnlineGame.steps.size(); i++ ) {
	        		System.out.println(getName() + ":" + OnlineGame.steps.get(i));
	        		stepsDone++;
					Thread.sleep(1000/rating);
					if ( Thread.currentThread().getName().equals("Sidorov")) System.out.println( "Sidorov stepsDone = " + stepsDone );
        		}
    	   		
				OnlineGame.isWinnerFound = true;				
    	   		
        	} catch (InterruptedException e) {
        		if ( stepsDone == OnlineGame.steps.size() ) System.out.println (Thread.currentThread().getName() + ":" + "победитель!");
        		else System.out.println(this.getName() + ":" + "проиграл");        		
			}
        }
    }
}
...
Рейтинг: 0 / 0
В чем ошибка?
    #38376471
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кажись понятно: если из сидорова вылетело исключение, то все что связано с сидоровым уже не существует в том кетче.
...
Рейтинг: 0 / 0
В чем ошибка?
    #38376474
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, получается, к тому времени, когда начнется gamer3.interrupt(); поток gamer3 уже успешно завершился и интеррупт ничего не дает.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / В чем ошибка?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]