Método que "puede o no" devolver un entero

Iniciado por NikNitro!, 19 Diciembre 2013, 22:52 PM

0 Miembros y 1 Visitante están viendo este tema.

NikNitro!

Buenas. Me encuentro implementando una tabla hash  y  el método int searchIdx(K key) debería devolver o null si el elemento no está, o el hash de la key. La duda es que no se que poner. Se que en Haskell se puede poner (algo así, no estoy seguro del todo, tendría que mirarlo para confirmarlo) como data res = nothing | integer

El código es el siguiente:

public class LinearProbingHashTable<K,V> implements HashTable<K,V>{

private K keys[];
private V values[];
private int size;
private double maxLoadFactor;
...
...
       /**
* Takes key of association and returns
* its insertion position in the table.
         * Collisions must be resolved using linear probing algorithm)
*/
private int searchIdx(K key) {
// to be completed
int idx = hash(key);
while(!(keys[idx] == null)) {
if(keys[idx] == key){
return idx;
} else {
idx++;
}
}
return null;
}


por supuesto me da error en el return null pues me dice que éste no es un entero... ¿Qué debo hacer?

Gracias ;)

ThinkByYourself

En lugar de int pones Integer y no problemo
No te voy a engañar.
Todos hemos sido programados para normalizar la psicopatía de las élites económicas y políticas, y para realimentar su patrón de ciega codicia.

dainodaibouken


Mitsu

#3
Según lo que recuerdo, un HashMap o en su versión antigua un HashTable (deprecated) no podía tomar un key value null. Ya que null no es un objeto, ¿cómo podrías llamar a equals(Object o) o a hashCode()?

No utilices HashTable, utiliza HashMap y ten en cuenta que por cuestión de buena programación y estructura, una key no puede ser null.

Nasty35

Haces un return 0, y con un if compruebas que si retorna 0, es por un error (y lo manejas).

NikNitro!

Resulta que lo estaba planteando mal. Ese método debe devolver el índice en el que debería estar la key... Esté ella o no, asi que devuelve siempre un número positivo ;)

Salud

PD: Si quereis algo del código pedidmelo ;)

~ Yoya ~

No puedes devolver un null en un método que retorna un valor de tipo primitivo, por eso el error.

En este caso debes utilizar un Wrapper class como ha dicho @NoBullshit, o retornar un 0 pero en ese caso quizás deberías modificar algunas lineas de código para que funciona.

Saludos.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.