Je fais du jeu de la vie en réseau 2D. J'ai besoin de déterminer quand toutes les cellules adjacentes sont vides, donc je viens de les tester tous. Cela fonctionne bien à moins que la cellule contrôlée soit la limite. Alors, bien sûr, tester X + 1 jette une exception car l'index est hors des limites du tableau. Puis-je gérer cela en quelque sorte au lieu de gérer l'exception? MerciComment vérifier en toute sécurité les limites des tableaux
Répondre
Si vous voulez la vitesse que vous aurez à traiter les cellules de bord différemment et traiter le reste avec un
for(int x = 1; x < Size-1; x++) // these all have x-1 and x+1 neighbours
Oui, avant d'accéder à l'élément à l'index i + 1
, vérifier si i + 1
est strictement inférieure à array.Length
.
Mais il faudrait beaucoup de conditions alors, non? y moins que array, y plus grand, x moins, x plus grand – Loj
C'est mieux que d'attraper des exceptions qui sont exceptionnelles. –
utilisez GetLength(0)
et GetLength(1)
pour obtenir la largeur et la hauteur du tableau.
Il y a aussi une astuce de performance que le moteur d'exécution utilise pour ses propres vérifications de limites: la conversion en unsigned int pour réduire les deux contrôles en un seul. Mais puisque cela coûte la lisibilité, vous l'utilisez si la vérification est vraiment critique.
(i >= 0) && (i < length)
devient
(uint)i < length
Très soigné, viens d'utiliser la version UINT. – Dib
J'ai créé une méthode d'extension pour une Tableau 2D pour vérifier si les limites sont:
public static class ExtensionMethods
{
public static bool In2DArrayBounds(this object[,] array, int x, int y)
{
if (x < array.GetLowerBound(0) ||
x > array.GetUpperBound(0) ||
y < array.GetLowerBound(1) ||
y > array.GetUpperBound(1)) return false;
return true;
}
}
- 1. Vérification des limites des tableaux d'exécution en C++ avec g ++
- 2. Comment traiter en toute sécurité les paramètres optionnels
- 3. Comment vérifier les limites dans gcc/mingw?
- 4. Comment analyser bbcodes en toute sécurité?
- 5. Comment demander des données en toute sécurité via Google OAuth?
- 6. Comment supprimer en toute sécurité des fichiers dans Java
- 7. Comment utiliser un obfuscateur en toute sécurité?
- 8. Comment utiliser en toute sécurité les caches ThreadLocal dans Actors?
- 9. Comment signer des données en toute sécurité avec un horodatage?
- 10. Liste/tableaux - Vérifier les dates
- 11. En Perl, comment créer en toute sécurité un FIFO temporaire?
- 12. Servir des images chargées en toute sécurité dans Django?
- 13. Comment convertir en toute sécurité `ToBase64String` en morceaux?
- 14. JSON - ajouter une variable en toute sécurité
- 15. Soulever un fil d'événement en toute sécurité
- 16. Comment utiliser rand_r et comment l'utiliser en toute sécurité?
- 17. Téléchargement d'images en toute sécurité avec PHP
- 18. setTimeout en boucle pour vérifier un changement dans les limites
- 19. Débogueur Fortran 77 pour vérifier les limites d'un tableau
- 20. Rendu en toute sécurité des modèles django fournis par l'utilisateur
- 21. en toute sécurité l'analyse des cartes dans clojure
- 22. Comment effacer en toute sécurité un fichier/répertoire en Python?
- 23. Changement de tâche en toute sécurité sur les puces ATmega
- 24. Script Bash pour créer des liens symboliques en toute sécurité?
- 25. Comment intégrer en toute sécurité un fichier flash (swf)?
- 26. Renommez le cours en toute sécurité?
- 27. Déplacer en toute sécurité Microsoft SDKs dossier
- 28. Dictionnaire .NET: énumère uniquement les threads en toute sécurité?
- 29. Comment utiliser en toute sécurité les paramètres dans les threads, en utilisant C++ & Pthreads?
- 30. Comment supprimer en toute sécurité global.asax du service Web
e sont 2 formes de tableaux 2D. Une simple déclaration clarifierait beaucoup cette question. –