Индекс массива из обработки связанных исключений внутри try catch - PullRequest
0 голосов
/ 20 января 2019

получение индекса массива из привязанного исключения в приведенном ниже коде. Я попытался поместить строку ошибки в try-catch, поместив try catch, также выдав ошибку в eclipse. Может кто-нибудь, пожалуйста скажите мне, что я делаю неправильно.

Ошибка:

"Multiple markers at this line
- Syntax error on token "try", invalid 
 Modifiers
- Syntax error, insert "}" to complete 
 Block"

С попыткой поймать:

try {
    public hashMapimpl() {
        table =new Entry[5];
    }}catch(Exception e)
  {
        e.getMessage();
  }

Полный код:

import java.util.Map.Entry;
class hashMapimpl<K,V>  {   
    static int capacity=5;
    private Entry<K,V> [] table;

    static class Entry<K, V>{
        K key;
        V value;
        Entry<K,V> next;

        public Entry(K key,V value, Entry<K,V> next)
            {
            this.key=key;
            this.value=value;
            this.next=next;
        }

    }

    public hashMapimpl() {
        table =new Entry[capacity];
    }

    public void put(K newKey, V data) {
        if(newKey==null) {
            return;
        }
        int hash=hash(newKey);
        Entry<K,V> newentry = new Entry<K,V>(newKey,data,null);
        if(table[hash]==null)
            table[hash]=newentry;
        else {
            Entry<K,V> previous =null;

            Entry<K,V> current=table[hash];     
        while(current!=null)
        {
            if(current.key.equals(newKey))
            {
                if(previous==null) {
                    newentry.next=current.next;
                    table[hash]=newentry;
                    return;}
                else {
                    newentry.next=current.next;
                    table[hash]=newentry;
                    return;
                }
            }
            previous=current;
            current=current.next;
        }
        previous.next=newentry;
        }
    }


    public V get(K key) {
        int hash=hash(key);
        if(table[hash]==null) {
            return null;
        }
        else {
            Entry<K,V> temp=table[hash];
            while(temp!=null)
            {
                if(temp.key.equals(key))
                    temp=temp.next;
                    return temp.value;

            }
            return null;
        }
    }

    public void display()
    {

        for(int i=0;i<capacity;i++) {
            if(table[i]!=null) {
                Entry<K,V> e=table[i];
                while(e!=null)
                {
                    System.out.println(e.key);
                    System.out.println(e.value);
                    e=e.next;
                }
            }
        }
    }
    private int hash(K Key) {
        return Math.abs(Key.hashCode());
    }

public static class hashmap_main{
    public static void main(String[] args)
    {
        hashMapimpl<Integer,Integer> h1 = new hashMapimpl<Integer,Integer>();
        h1.put(2, 4);
        h1.put(4, 0);
        h1.put(23, 9);
        h1.put(1, 8);

        System.out.println(h1.get(23));

    }
}
}

Ответы [ 2 ]

0 голосов
/ 20 января 2019

Синтаксис для try / catch выглядит следующим образом:

try {
    // statements

} catch(Exception e) {
    // more statements
}

Ваш код появляется , чтобы иметь объявление конструктора

public hashMapimpl() {
    table = new Entry[5];
}

там, где должны быть заявления. Это не допустимая Java. И это мало что значит для меня.

В любом случае, компилятор Java справедливо говорит вам, что синтаксис неправильный ... хотя и не объясняя, почему 1 .

Возможно, вы имеете в виду это:

public hashMapimpl() {
    try {
        table = new Entry[capacity];
    } catch(Exception e) {
        System.err.println(e.getMessage());
    } 
}

но это тоже плохая идея.

В: Что произойдет, если вы получите исключение?

A: Конструктор собирается напечатать сообщение об ошибке ... и затем продолжить, как будто ничего не пошло не так. И это оставит вас с null в поле table ... которое, скорее всего, вызовет NPE чуть позже.

Правильный способ решить эту проблему - выяснить , почему вы получаете исключение ArrayIndexOutOfBounds, и исправить причину исключения.

Подсказка: каково фактическое значение capacity при создании массива ??


1 - К сожалению, компилятор может выдать осмысленное сообщение об ошибке только в том случае, если он понимает, что вы подразумевали под этим . Компиляторы обычно не могут понять, что вы (вероятно) имеете в виду, если синтаксис слишком испорчен.

0 голосов
/ 20 января 2019

Вы не можете иметь массивы общих классов. Java просто не поддерживает это. См. Этот ответ для использования коллекций в качестве альтернативы.

https://stackoverflow.com/a/7131673/7260643

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...