Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема с ошибкой - NoSuchElementException(коллекции) / 17 сообщений из 17, страница 1 из 1
27.09.2014, 22:28
    #38759642
Sergeyyy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ошибкой - NoSuchElementException(коллекции)
Всем форумчанам снова привет!

Пытался модифицировать код, который мне любезно помогли сделать в теме ниже, под свои нужды...И понеслась ошибка на ошибке.


СОбс-но, вот он:
(тапочками особо не кидать!)

Код: 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.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class tstr {

	public static ExecutorService es = Executors.newCachedThreadPool();
	public static Map<String, Runner> array = Collections
			.synchronizedMap(new HashMap<String, Runner>());
	public static Map<String, String[][]> array2 = new HashMap<String, String[][]>();
	public static Map<String, String[][]> array3 = new HashMap<String, String[][]>();
	public static int A1 = 1;
	public static int B1 = 4;

	public static void main(String[] args) {
		runs();
		Scanner scan = new Scanner(System.in);
		while (true) {
			String nxt = scan.next();
			Runner obj = array.get(nxt);
			Runner runner;
			if (obj != null) {
				obj.future.cancel(true);
				int factor = obj.factor;
				factor *= 2;
				Iterator iter = array2.entrySet().iterator();
				Iterator iter2 = array3.entrySet().iterator();
				while (iter.hasNext()) {
					while (iter2.hasNext()) {
						Map.Entry en = (Map.Entry) iter.next();
						Map.Entry en2 = (Map.Entry) iter2.next();
						if (nxt.equals(en.getKey())) {
							if (nxt.equals(en2.getKey())) {
								String[][] arr = (String[][]) en.getValue();
								String[][] arr2 = (String[][]) en2.getValue();
								arr[0][4] = String.valueOf(factor);
								arr2[0][3] = String.valueOf(factor);
								array2.put(nxt, arr);
								array3.put(nxt, arr2);
							}
						}
					}
				}
				runner = new Runner(factor, nxt);
			} else {
				runner = new Runner(2, nxt);
				String[][] m1 = new String[1][5];
				m1[0][0] = nxt;
				m1[0][1] = nxt;
				m1[0][2] = "0";
				m1[0][3] = "0";
				m1[0][4] = "2";
				String[][] m2 = new String[1][5];
				m2[0][0] = nxt;
				m2[0][1] = "0";
				m2[0][2] = "0";
				m2[0][3] = "2";
				array2.put(nxt, m1);
				array3.put(nxt, m2);
			}
			array.put(nxt, runner);
			runner.future = es.submit(runner);
		}
	}

	public static void runs() {
		(new Thread(new Runnable() {
			@Override
			public void run() {
				for (int i = 0; i < Integer.MAX_VALUE; i++) {
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						// e.printStackTrace();
					}
					Iterator iter = array2.entrySet().iterator();
					Iterator iter2 = array3.entrySet().iterator();
					while (iter.hasNext()) {
						while (iter2.hasNext()) {
							Map.Entry en = (Map.Entry) iter.next();
							Map.Entry en2 = (Map.Entry) iter2.next();
							String[][] arr = (String[][]) en.getValue();
							String[][] arr2 = (String[][]) en2.getValue();
							if (arr2[0][3] == "0") {
								System.out.println(arr[0][1] + " Удален == 0");
								iter.remove();
								iter2.remove();
							}
						}
					}
					System.out.println("---------------");
				}

			}
		})).start();
	}

	private static class Runner implements Runnable {
		private Future future;
		private final int time = 1000;
		private int factor;
		private String element;

		private Runner(int factor, String element) {
			this.factor = factor;
			this.element = element;
		}

		@Override
		public void run() {
			try {
				Thread.sleep(factor * time);
				tstr.array.remove(element);
				for (Entry<String, String[][]> entry2 : tstr.array3.entrySet()) {
					String[][] arr2 = entry2.getValue();
					arr2[0][3] = "0";
					tstr.array3.put(element, arr2);
				}
				System.out.println(element + " removed " + factor + " seconds");
			} catch (InterruptedException e) {
			}
		}
	}
}



Если вы попробуете запустить этот код, и введете много много значений( просто вводите много цифр и ждите) То в конце концов у вас выдаст - Exception in thread "main" java.util.NoSuchElementException

Причина мне не ясна, сначала он выдавал КурентМодификаторЕкспетион( Да простит меня Гослинг) НО я вроде бы эту проблему исправил, переделав все с итераторами. А теперь элементы из коллекции выпадают..


Помогите, пожалуйста! Гуру отозвитесь!))
...
Рейтинг: 0 / 0
27.09.2014, 23:42
    #38759656
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ошибкой - NoSuchElementException(коллекции)
Sergeyyy,
убери
Код: java
1.
Thread.sleep(factor * time);

и все будет ок
...
Рейтинг: 0 / 0
28.09.2014, 00:08
    #38759663
Sergeyyy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ошибкой - NoSuchElementException(коллекции)
rema174,

но это ключевой элемент программы))
...
Рейтинг: 0 / 0
28.09.2014, 00:25
    #38759669
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ошибкой - NoSuchElementException(коллекции)
Sergeyyy,

тогда ты знаешь вокруг чего тебе нужно плясать, удачи ))
...
Рейтинг: 0 / 0
28.09.2014, 00:27
    #38759670
Sergeyyy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ошибкой - NoSuchElementException(коллекции)
rema174,

Даже не представляю, если честно... слипать поток, это пока единственный выход сделать время.. Можно, конечно, отсчитывать разницу времени..НО это как то не так. Неужели дело только в этом?) Я думал нет элементов в коллекции или еще чего-то..
...
Рейтинг: 0 / 0
28.09.2014, 00:45
    #38759677
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ошибкой - NoSuchElementException(коллекции)
у тебя всн нормально работает, когда сначала срабатывает английский вывод...(и все что с ним связано), а потом уже русский, но когда начинаешь много вводить, то у тебя "англ-й" не поспевает за "русским"... вот там и возникает ошибка
...
Рейтинг: 0 / 0
28.09.2014, 00:54
    #38759679
Sergeyyy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ошибкой - NoSuchElementException(коллекции)
rema174,

И как исправить, кроме удаления слип? Вроде бы та русская часть в отдельном рунере/потоке..
...
Рейтинг: 0 / 0
28.09.2014, 01:17
    #38759681
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ошибкой - NoSuchElementException(коллекции)
Sergeyyy,

а что тебе это даст, если ты не понимаешь, что делает твоя программа?
...
Рейтинг: 0 / 0
28.09.2014, 01:18
    #38759683
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ошибкой - NoSuchElementException(коллекции)
или можно поставить вопрос по другому: зачем делать то, что не понимаешь, делай таким путем который понимаешь, чтобы не загонять себя в такие тупики
...
Рейтинг: 0 / 0
28.09.2014, 01:25
    #38759684
Sergeyyy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ошибкой - NoSuchElementException(коллекции)
rema174,

Честно говоря, я и не знаю как сделать такое паралельное отсчитывание времени.. Только слип ведь.
...
Рейтинг: 0 / 0
29.09.2014, 13:02
    #38760530
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ошибкой - NoSuchElementException(коллекции)
По моему всё предельно ясно.

public class NoSuchElementException
extends RuntimeException

Thrown by the nextElement method of an Enumeration to indicate that there are no more elements in the enumeration.
...
Рейтинг: 0 / 0
29.09.2014, 17:24
    #38760986
Sergeyyy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ошибкой - NoSuchElementException(коллекции)
mayton,

Вам Гуру все ясно) А мне что-то нифига) Посмотрел как можно еще решить, скажем так, приостанавливание , выдало timer. Запускаем какой-то task через определенное время.( Хотя у него много других параметров, запуск с повторением и т д. Ни один из них не подошел..Так что нужно решать этот вопрос с sleep)

Ксати, элементы то в коллекции есть. Если вы попробуете запустить этот код и много много раз введете, то у вас выскочит эта самая ошибка, но после нее вы увидите вывод вот этой строки:

Код: java
1.
System.out.println(element + " removed " + factor + " seconds");



Значит элементы там все же есть...
...
Рейтинг: 0 / 0
29.09.2014, 17:41
    #38761029
DDiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ошибкой - NoSuchElementException(коллекции)
а нафиг вам столько мапов 0_о
пытался понять что вы хотите этим кодом сделать, бросил так и не начав.
У вас помница была довольно простая задача. А вы из неё монстра какого-то сделали.

Ещё раз вам повторю, сформулируйте вашу задачу, судя по коду, вы к ней идете через одно место. Сформулируйте именно задачу, а не описывайте уже некий ваш алгоритм, который вы хотите приладить к поставленной задаче.
...
Рейтинг: 0 / 0
29.09.2014, 17:50
    #38761052
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ошибкой - NoSuchElementException(коллекции)
DDiver,
+1
...
Рейтинг: 0 / 0
29.09.2014, 17:54
    #38761062
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ошибкой - NoSuchElementException(коллекции)
SergeyyyПосмотрел как можно еще решить, скажем так, приостанавливание , выдало timer. Запускаем какой-то task через определенное время.( Хотя у него много других параметров, запуск с повторением и т д. Ни один из них не подошел..Так что нужно решать этот вопрос с sleep)

Ксати, элементы то в коллекции есть. Если вы попробуете запустить этот код и много много раз введете, то у вас выскочит эта самая ошибка, но после нее вы увидите вывод вот этой строки:

Я очень рад что ты хотя-бы понял масштабность трагедии. Мультпипоточный код отличнается от однопоточного
недереминизмом состояний. На нашем языке это значит примерно следующее. В классическом однопоточном
коде можно выделить N состояний и спокойно ходить по ним дебаггером (с чашечкой кофе в руке). Вдумчиво.
В мультипоточном коде попытка встать дебаггером или добавить System.out.println или добавить sleep() сильно
меняет картину. Это как квантовый эффект бро. Как только ты смотришь на код - он ведёт себя так. А как
только не смотришь - по другому

Как фиксить твой код я чесно говоря не знаю т.к. не знаю чего ты добиваешся. Кэп очевидность говорит
что there are no more elements in the enumeration. . Нет элементов в интерфейсе Enumeration.
Возможно ты в одном потоке дёрнул hasNext а в другом next. Если простьто ставить себе задачу - исключить
некорректное поведение с Enum - то это не будет решением твоего алгоритма. Я знаю как синхронизировать
Enum но что это тебе даст? Будет ли это целью? Или это ложная цель. Скорее всего ложная.
...
Рейтинг: 0 / 0
29.09.2014, 19:56
    #38761222
Sergeyyy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ошибкой - NoSuchElementException(коллекции)
mayton,

Может это решит какие-то проблемы...А может и нет, синхронизация эта)
...
Рейтинг: 0 / 0
29.09.2014, 20:05
    #38761234
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с ошибкой - NoSuchElementException(коллекции)
Это примерно как бессстемно махать топором и думать авось получится стол вырезать
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема с ошибкой - NoSuchElementException(коллекции) / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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