Member 12810377 Ответов: 0

Моя хэш-таблица выбрасывает исключение out of bound, но я не могу понять почему.


Моя хэш-таблица выдает java. lang.ArrayIndexOutOfBoundsException: когда я вставляю более 200 объектов. Я думал, что правильно закодировал метод вставки и перефразирования, может ли кто-нибудь просто указать, что именно я делаю неправильно?

public void insert(String key) throws MapException {
	
		int word = hcode.giveCode(key);
		int index1 = word % List.length;
		int index2 = 5 - word % 5;
		int i = 0;
		
		
		if (find(key) == false) {
			while (i < List.length) {
				if (List[(((index1) + (index2 * i)) % List.length)] == null) {
					List[(((index1) + (index2 * i)) % List.length)] = key;
					numberOfElements++;
					break;
				} else {
					i++;

				}

			}
			if (getLoadFactor() > MaxLoadFactor) {
				rehash();
		}
		}

	

	}
	
	public void insert(String key, String[] List) throws MapException{
		int word = hcode.giveCode(key);
		int index1 = word % List.length;
		int index2 = 5 - word % 5;
		int i = 0;
		
		
			while (i < List.length) {
				if (List[(((index1) + (index2 * i)) % List.length)] == null) {
					List[(((index1) + (index2 * i)) % List.length)] = key;
					break;
				} else {
					i++;

				}

			}

public void rehash() throws MapException{
		
		int rehashNum = primeNum(FirtListSize);
	String [] rehashList = new String [rehashNum];
	
	for (int i = 0;i<list.length;i++){ if(list[i]!="null){" insert(list[i],rehashlist);="" }="" list="rehashList;" public="" int="" primenum(int="" num1){="" boolean="" isprime="false;" num="Num1" *2;="" start="2;" while="" (!isprime)="" {="" +="1;" m="(int)" math.ceil(math.sqrt(num));="" for="" (int="" i="start;" <="m;" i++)="" if="" (num="" %="" 0)="" break;="" return="" num;="" pre="">

What I have tried:

I have tried changing the value from == null to != null which I thought would control the problem and acount for dummy values

Suvendu Shekhar Giri

В чем проблема с отладкой и таким простым поиском корня проблемы?
Какую IDE вы используете?

0 Ответов