Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / В чем ошибка? / 3 сообщений из 3, страница 1 из 1
24.08.2013, 11:11:29
    #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
24.08.2013, 11:29:09
    #38376471
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка?
Кажись понятно: если из сидорова вылетело исключение, то все что связано с сидоровым уже не существует в том кетче.
...
Рейтинг: 0 / 0
24.08.2013, 11:38:23
    #38376474
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка?
да, получается, к тому времени, когда начнется gamer3.interrupt(); поток gamer3 уже успешно завершился и интеррупт ничего не дает.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / В чем ошибка? / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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