Je suis en train de faire quelque chose comme ça, c'est-à-dire, utiliser un tableau dans une instruction switch. Est-ce possible en Java ? Si ce n’est pas, s’il vous plaît expliquer une solution possible.
Réponses
Trop de publicités?@sᴜʀᴇsʜ ᴀᴛᴛᴀ a raison. Mais je voulais ajouter quelque chose. Depuis Java 7, instructions switch prend en charge les chaînes, vous pourriez faire quelque chose avec ça. C’est vraiment sale et je ne recommande pas, mais cela fonctionne :
Pour ceux concernés sur les performances : vous avez raison, ce n’est pas super rapide. Cela sera compilée dans quelque chose comme ceci :
Non, simplement vous ne pouvez pas.
Le type de l’Expression doit être char, octets, court, int, caractère, Byte, Short, Integer, String ou un type enum (§8.9), ou une erreur de compilation se produit.
http://docs.Oracle.com/javase/specs/JLS/Se7/html/JLS-14.html#JLS-14.11
Vous ne pouvez pas activer des tableaux entiers. Mais vous pouvez convertir un bit défini aux dépens d’une certaine lisibilité du switch
lui-même:
switch (values[0] + 2 * values[1] + 4 * values[2] + 8 * values[3])
et utilisez des littéraux binaires dans vos déclarations de cas: case 0b0101
est votre premier.
Essayez cette solution:
boolean[] values = new boolean[4];
values[0] = true;
values[1] = false;
values[2] = false;
values[3] = true;
if (ArrayUtils.isEquals(values, new boolean[] {true, false, true, false})) {
...
}
else if (ArrayUtils.isEquals(values, new boolean[] {false, false, true, false})) {
...
}
else {
...
}
Voir docs ici .
Oui, vous pouvez passer un tableau à un commutateur. Le hic, c'est que je ne parle pas de Java, les tableaux, mais une structure de données.
Un tableau est un arrangement systématique des objets, généralement en lignes et en colonnes.
Ce que vous essayez de faire est de mettre en place un système qui reconnaît les différents drapeaux et selon les drapeaux qui sont activés ou désactivés vous prendre différentes actions.
Exemple
Populaire de la mise en œuvre de ce mécanisme est de permissions de fichiers sous Linux. Lorsque vous avez rwx
comme le "tableau des indicateurs".
Si l'ensemble de la baie est vrai, vous verrez rwx
, ce qui signifie que vous disposez de toutes les autorisations. Si vous n'êtes pas autorisé à effectuer une action sur un fichier, l'ensemble du tableau est faux, vous verrez ---
.
La mise en œuvre
Devinez quoi, vous pouvez penser à des nombres entiers comme des tableaux. Un entier est représenté par un "tableau de bits".
001 // 1, if on, set x
010 // 2, if on, set w
100 // 4, if on, set r
// putting it all together in a single "array" (integer)
111 // 2^2 + 2^1 + 2^0 = 4 + 2 + 1 = 7
C'est pourquoi la permission rwx
peut être représenté comme un 7
Java extrait:
class Flags {
public static void main(String args[]) {
/**
* Note the notation "0b", for binary; I'm using it for emphasis.
* You could just do:
* byte flags = 6;
*/
byte flags = 0b110; // 6
switch(flags) {
case 0: /* do nothing */ break;
case 3: /* execute and write */ break;
case 6: System.out.println("read and write\n"); break;
case 7: /* grant all permissions */ break;
default:
System.out.println("invalid flag\n");
}
}
}
Pour en savoir plus sur l'utilisation d'un format binaire, cochez cette question: En Java, puis-je définir une constante entière en format binaire?
Performance
- Économise de la mémoire
- Vous n'avez pas besoin de traitement supplémentaire, les commutateurs ou tout autre type de jonglage.
C des programmes qui nécessitent d'être aussi efficace que possible l'utilisation de ce type de mécanisme; ils utilisent des drapeaux représentés avec une seule bits.