2015-04-21 4 views
2

J'ai écrit ce code simple pour vérifier si un tas binaire est vide ou non. J'ai un problème avec retour. Il ne peut pas être: null, void, ou rien; Il devrait retourner quelque chose int, mais je ne sais pas quoi. Alors, que dois-je mettre là, si je veux garder ce code simple? (Je ne veux pas utiliser la classe Integer ou java.lang.Integer).Que retourner comme élément minimum d'un tas vide

public int getMinimum() {  
    if (isEmpty()) { 
    System.out.println("Heap is empty"); 
    return;   
    } else 
    return data[0]; 
} 
+2

Renvoie '-1' ou une valeur spéciale –

+0

Le code peut renvoyer ce que vous voulez. Que fait-il réellement? Quelle est votre définition de simple. Dans votre ensemble de données, un zéro est-il une solution valide? Peut-être que -1 fonctionnerait? Vous devez donner plus de détails/contexte. – mjuarez

+0

Il ne peut pas retourner "-1", car il peut confondre avec "valeur minimale" de l'arbre. – Hengameh

Répondre

2

lancer une exception pour valeur non valide et la poignée lorsque vous appelez

public int getMinimum() throws Exception { 
    if (isEmpty()) 
     throw new Exception("Heap is Empty"); 
    else 
     return data[0]; 
} 

et lors de l'obtention minimum

try{ 
    int i = getMinimum(); 
    System.out.println("Minimum is :" + i); 
}catch(Exception e){ 
    System.out.println(e.getMessage()); 
} 
1

je ne peux aider à éliminer ... java est pas magique. Si vous déclarez votre fonction pour retourner un "int", alors le compilateur vous fera retourner un int. Ce qui laisse des options limitées:

1) lancer une exception, et enseigner à vos utilisateurs de l'utiliser en combinaison avec 'isEmpty()', par exemple: si (theHeap.isEmpty()) System.out.println (» vide"); autre System.out.println (theHeap.getMinimum())

2) utiliser cet entier qui ne vous plaisait pas (je devine, pour des raisons de performance?)

3) trouver une valeur int ce n'est pas susceptible d'être présent dans les données, par exemple peut-être que vous ne vous attendez pas à ce que votre tas contienne jamais Integer.MIN_VALUE.
Si votre tas contient double, je recommanderais NaN.

C'est tout ce qui est disponible dans la syntaxe java, désolé il est broyé ne freinez pas ...

1

int est une primitive et doit donc avoir une valeur. Si vous voulez vraiment le résoudre comme ceci, vous devez spécifier une certaine valeur int qui n'apparaîtra jamais dans le tas. Vous pouvez également essayer de lancer une exception lorsque le tas est vide.

0

nous pouvons simplement déclarer qu'il est "Entier" au lieu de "int", afin que nous puissions retourner "null", aussi bien.

public Integer getMinimum(){  
    if(isEmpty()) 
    return null;   
    else 
    return data[0]; 
}