À l'aide de tableaux de commutateur cas de java
J'ai le code où ce qu'une instruction switch est un test pour dépend d'une variable de tableau:
String shuff = Import.shuffle();
String[] form = new String[95];
for(int i = 0; i < 95; i++)
{
form[i] = Format.shuffle(shuff, i);
}
switch(str)
{
case "a":
x = 6;
break;
case "b":
x = 16;
break;
case "c":
x = 23;
break;
//So on and so forth
}
Ce que je veux faire, c'est de prendre la forme matricielle[] et de l'utiliser selon le cas:
String shuff = Import.shuffle();
String[] form = new String[95];
for(int i = 0; i < 95; i++)
{
form[i] = Format.shuffle(shuff, i);
}
switch(str)
{
case form[0]:
x = 6;
break;
case form[1]:
x = 16;
break;
case form[2]:
x = 23;
break;
//So on and so forth
}
Mais quand j'essaie, il me donne l'erreur "cas expressions doivent être des expressions constantes". Deux options pour résoudre ce viennent à l'esprit, mais je ne sais pas comment faire.
1. utiliser le tableau dans le commutateur cas en quelque sorte
2. utiliser une sorte de méthode qui devrait ressembler à ceci...
String shuff = Import.shuffle();
String[] form = new String[95];
for(int i = 0; i < 95; i++)
{
form[i] = Format.shuffle(shuff, i);
}
switch(str)
{
case form[0].toString():
x = 6;
break;
case form[1].toString():
x = 16;
break;
case form[2].toString():
x = 23;
break;
//So on and so forth
}
Est-il un moyen de le faire?
L'Importation.shuffle méthode prend un fichier texte avec 95 lignes (chaque ligne étant un caractère) et les chaînes de caractères et le Format.shuffle met chacune des lignes originales dans des variables de tableau.
Je ne peux pas le convertir en un si sinon si la chaîne parce que c'est un 95 switch (edit)
Mais il n'est pas le seul problème, comme indiqué par Alexis King
OriginalL'auteur Kai Arakawa | 2014-12-21
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas. Java est
switch
déclaration nécessite quecase
labels être des expressions constantes. Si votre code ne fonctionne pas avec cette restriction, vous aurez besoin d'utiliserif...elseif...else
constructions à la place.Voir §14.11 de la JLS:
Ce genre d'action, vous avez à effectuer ?
Si vous êtes sérieusement de tenter d'utiliser un 95-switch, il y a probablement de meilleures façons d'accomplir ce problème.
OriginalL'auteur Alexis King
Vous pourriez trouver l'index de
str
dansform
, puis basculez en fonction de l'indice. Par exemple:Cependant, aucune des deux solutions proposées car, lorsque le code est compilé, le compilateur a besoin de savoir exactement ce que chaque
case
valeur au lieu de simplement en sachant qu'il est dans une variable. Je ne suis pas sûr que les raisons exactes, mais il est peut-être pour l'optimisation, ou de vous assurer de cas ne sont pas dupliqués (compiler de manière incorrecte, IIRC). La ligne de fond est queform[0]
n'est pas une constante et le compilateur veut une constante.OriginalL'auteur FlyingPiMonster
Comme mentionné avant,
Java
nécessite des expressions constantes en cas sur sonswitch
consolidés.Vous pourriez avoir besoin pour la conception de la structure de mieux. J'ai remarqué que vous faites une affectation de variable x, sur chaque cas. Si c'est votre vrai code, on peut carte
x
valeurs possibles dans uneMap
, ou vous pouvez même maped sur la base de l'index, dans un tableau int pour être possible de récupérer encore plus vite (avecO(1)
complexité).Exemples:
OriginalL'auteur Nick Louloudakis
Si vous avez vraiment besoin de faire cela, vous aurez à utiliser une cascade de if/else. Il n'en serait pas moins efficace que ce que vous imaginez l'instruction switch. Donc:
Prend beaucoup moins de lignes de la source.
if
instructions sur une seule ligne, par opposition à la diffusion. Aussi, pour assez instructions dans unswitch
instruction, il peut s'avérer plus efficace.La raison, il est plus efficace est pourquoi le cas de conditions doit être constant... pour créer un saut de la table. Si vous utilisez java 7/8 chaîne de variante il compile comme une cascade de if/else .
OriginalL'auteur AlanObject