参数化的对象无法解析为变量

程序125

我有这段代码:

    @SuppressWarnings("unchecked")
    public void put(K key,V value){
        if(this.containsKey(key)){
            TableEntry<K,V> foundKey = (TableEntry<K,V>)this.getTableEntry(key);
            foundKey.setValue(value);
        } else{
            int slotNumber = Math.abs(key.hashCode()) % size;
            TableEntry<K,V> candidate = (TableEntry<K,V>) elements [slotNumber];
        }

        // empty slot
        if(candidate == null){
            elements[slotNumber] = new TableEntry(key,value,null);
        }else{
            while(candidate != null){
                candidate = candidate.next;
            }
            candidate.next = new TableEntry(key,value,null);
        }
    }

变量candidateslotNumber在Eclipse中带有下划线,TableEntry()构造函数的调用也是如此你能告诉我为什么我不能比较例如null的候选人吗?

如果需要,这里是完整的类(哈希表):

package hr.fer.oop.lab3.prob2;

public class SimpleHashtable<K,V> {

    private V[] elements;
    private static int defaultsize = 16;
    private int size;

    public SimpleHashtable(){
        this(defaultsize);
    }

    @SuppressWarnings("unchecked")
    public SimpleHashtable(int initialCapacity){
        if(initialCapacity < 1) {
            throw new IllegalArgumentException("Capacity must be at least 1.");
        }
        elements = (V[])new Object[calculateCapacity(initialCapacity)];
    }

    public int calculateCapacity(int number){
        int result = 2;
        while(result < number){
            result = result << 1;
        }
        System.out.println(result);
        return result;
    }

    @SuppressWarnings("unchecked")
    public void put(K key,V value){
        if(this.containsKey(key)){
            TableEntry<K,V> foundKey = (TableEntry<K,V>)this.getTableEntry(key);
            foundKey.setValue(value);
        } else{
            int slotNumber = Math.abs(key.hashCode()) % size;
            TableEntry<K,V> candidate = (TableEntry<K,V>) elements [slotNumber];
        }

        // empty slot
        if(candidate == null){
            elements[slotNumber] = new TableEntry(key,value,null);
        }else{
            while(candidate != null){
                candidate = candidate.next;
            }
            candidate.next = new TableEntry(key,value,null);
        }
    }

    @SuppressWarnings("unchecked")
    private TableEntry<K,V> getTableEntry(K key) {
        int slotNumber = Math.abs(key.hashCode()) % this.size;
        TableEntry<K,V> candidate = (TableEntry<K,V>) elements [slotNumber];

        while(candidate != null){
            if(key.equals(candidate.getKey())){
                return candidate;
            }
            candidate = candidate.next;
        }
        return null;
    }

    private boolean containsKey(K key) {
        return false;
    }

    private static class TableEntry<K,V>{
        K key;
        V value;
        TableEntry next = null;

        public TableEntry(K key, V value, TableEntry next){
            this.key = key;
            this.value = value;
            this.next = next;
        }

        K getKey(){
            return key;
        }

        V getValue(){
            return value;
        }

        void setValue(V value){
            this.value = value;
        }

        @Override
        public String toString(){
            return "Key:" + (String)key + "Value:" + (String)value;
        }
    }
}
约翰·布林格

candidate和的声明slotNumber仅在包含它们的最里面的块中可见,在这种情况下,它不包含其他任何内容。看来您想将使用这些变量的代码移到该块中(而不是将声明移出该块):

    @SuppressWarnings("unchecked")
    public void put(K key, V value){
        if (this.containsKey(key)) {
            TableEntry<K, V> foundKey = this.getTableEntry(key);
            foundKey.setValue(value);
        } else {
            int slotNumber = Math.abs(key.hashCode()) % size;
            TableEntry<K,V> candidate = (TableEntry<K, V>) elements[slotNumber];

            // empty slot
            if (candidate == null) {
                elements[slotNumber] = new TableEntry<K, V>(key, value, null);
            } else {
                while (candidate != null) {
                    candidate = candidate.next;
                }
                candidate.next = new TableEntry<K, V>(key, value, null);
            }
        }
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java:无法将对象解析为变量

来自分类Dev

_____无法解析为变量

来自分类Dev

无法解析为变量

来自分类Dev

java-无法将对象解析为变量

来自分类Dev

变量未初始化,Void 方法无法返回值,无法解析为变量

来自分类Dev

AccessLevel无法解析为变量

来自分类Dev

NimbusLookAndFeel无法解析为变量

来自分类Dev

类无法解析为变量

来自分类Dev

R无法解析为变量-

来自分类Dev

矩阵无法解析为变量

来自分类Dev

sqlq无法解析为变量

来自分类Dev

onClickListener无法解析为变量

来自分类Dev

R无法解析为变量-

来自分类Dev

索引无法解析为变量

来自分类Dev

LocalDateTime无法解析为变量

来自分类Dev

尝试获取相机参数时出现“参数无法解析为变量”

来自分类Dev

尝试返回无法解析为变量的变量

来自分类Dev

变量无法解析为循环内的变量

来自分类Dev

如何将变量解析为参数

来自分类Dev

Java无法解析为变量或不适用于参数(布尔值)

来自分类Dev

解析参数的返回类型被推断为对象?

来自分类Dev

PrintWriter 对象变量在与资源一起使用时无法解析为类型

来自分类Dev

已知问题:“ R无法解析为变量”

来自分类Dev

R无法解析为变量:Chromecast示例

来自分类Dev

R无法解析为变量android 4.3

来自分类Dev

Java 8 forEach无法解析为变量

来自分类Dev

返回方法无法解析为变量

来自分类Dev

Eclipse(Android):无法解析为类型/变量等

来自分类Dev

key1无法解析为变量?