尝试捕获内部的绑定异常处理之外的数组索引

时间:2019-01-20 06:18:05

标签: java exception-handling

从下面的代码中的绑定异常中获取数组索引。 我试图将错误行放入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 :(得分:2)

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 actual 值是多少?


1-不幸的是,编译器只有在理解了您的理解后,才能产生有意义的错误消息。如果语法太混乱,编译器通常无法弄清您的意思(可能)。

答案 1 :(得分:-1)

您不能有泛型类的数组。 Java根本不支持它。有关使用集合作为替代方法的信息,请参见此答案。

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