从下面的代码中的绑定异常中获取数组索引。 我试图将错误行放入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));
}
}
}
答案 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根本不支持它。有关使用集合作为替代方法的信息,请参见此答案。