Pb d'erreur avec java
Résolu
Profil bloqué
-
Profil bloqué -
Profil bloqué -
Bonjour, j'ai un problème avec un code source que je programme en ce moments je suis entrain d'essayer d'afficher salut en 3 langues selon le choix et voila mon code source:
public class salut {
public static void main(String[] args){
char langue,fr,ar,en;;
switch (langue){
case'fr':
System.out.println("salut");
break;
case'en':
System.out.println("Hello");
break;
case'ar':
System.out.println("assalamou alikoum");
break;
default:
System.out.println("erreur");
break;
}
}
}
mais le problème c'est que on m'affiche erreur au dessu de "fr" comme etant un charactere invalide j'ai essayer de le mettre comme commentaire mais l'erreur saute a "en" et j'ai tous essayer mais rien a faire si kelk1 a une proposition je suis preuneuse merci d'avance
public class salut {
public static void main(String[] args){
char langue,fr,ar,en;;
switch (langue){
case'fr':
System.out.println("salut");
break;
case'en':
System.out.println("Hello");
break;
case'ar':
System.out.println("assalamou alikoum");
break;
default:
System.out.println("erreur");
break;
}
}
}
mais le problème c'est que on m'affiche erreur au dessu de "fr" comme etant un charactere invalide j'ai essayer de le mettre comme commentaire mais l'erreur saute a "en" et j'ai tous essayer mais rien a faire si kelk1 a une proposition je suis preuneuse merci d'avance
A voir également:
- Pb d'erreur avec java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
8 réponses
zut j'avais fait une super explication et fausse manip j'ai éffacé sans être sur mon texte résultat... page précédente
bref je le refait en plus court
pour ton switch il te faut une (et une seule) variable
dans ton cas ca sera langue (tu dois l'initialiser a une valeur contenu dans ton switch donc dans ton cas ca sera fr, en, ou ar)
il y a 2 lettres donc langue n'est pas de type char mais String (c'est une chaine)
ensuite dans ton switch tu as le cas 1 langue = fr, cas 2 langue = en, cas 3 langue = ar.
default (aucun des trois) : erreur
en aucun cas ces trois possibilités (fr, en et ar) ne sont des variables, ce sont les valeurs possibles de ta variable langue et tu ne dois pas les déclarer
essaie de voir ton switch comme un if, else if, else
dans ton cas tu aurais
if (langue == fr)
...
else if (langue == en)
...
else if (langue == ar)
...
else
erreur
en oubliant pas les {}que je n'ai pas mis^^
avec ce if tu ne déclarerais pas fr en et ar
c'est la même chose avec ton switch
en gros un switch est comme un if a quelques différences près :
on l'utilise en général quand on a plus de choix différents possibles (3-4 ca passe avec un if, plus ca devient ingérable)
on ne peut pas utiliser plusieurs variables en même temps (je ne sais pas si tu l'a déja fait mais dans un if on peut mettre if (variable1 == 1 OU variable2 == 5) par exemple a part le ou et le et qui se remplacent par des symboles (|| pour ou et && pour et))
pour résumer (mais lis quand même le reste ca te servira^^) tu dois déclarer ta variable langue de type String puis dans ton switch mettre tes différentes possibilités comme tu le ferais avec un if en respectant la syntaxte du switch (qui est juste dans ton code a part les quotes ('') qu'on ne met pas pour des chaines)
voila j'espère que tu comprend mieux (et surtout n'abandonne pas les switchs finiront par te servir vraiment si tu veux faire des codes assez gros pcq au bout d'un moment tu verras que des if else if finissent par devenir ingérable si tu as trop de possibilités)
bref je le refait en plus court
pour ton switch il te faut une (et une seule) variable
dans ton cas ca sera langue (tu dois l'initialiser a une valeur contenu dans ton switch donc dans ton cas ca sera fr, en, ou ar)
il y a 2 lettres donc langue n'est pas de type char mais String (c'est une chaine)
ensuite dans ton switch tu as le cas 1 langue = fr, cas 2 langue = en, cas 3 langue = ar.
default (aucun des trois) : erreur
en aucun cas ces trois possibilités (fr, en et ar) ne sont des variables, ce sont les valeurs possibles de ta variable langue et tu ne dois pas les déclarer
essaie de voir ton switch comme un if, else if, else
dans ton cas tu aurais
if (langue == fr)
...
else if (langue == en)
...
else if (langue == ar)
...
else
erreur
en oubliant pas les {}que je n'ai pas mis^^
avec ce if tu ne déclarerais pas fr en et ar
c'est la même chose avec ton switch
en gros un switch est comme un if a quelques différences près :
on l'utilise en général quand on a plus de choix différents possibles (3-4 ca passe avec un if, plus ca devient ingérable)
on ne peut pas utiliser plusieurs variables en même temps (je ne sais pas si tu l'a déja fait mais dans un if on peut mettre if (variable1 == 1 OU variable2 == 5) par exemple a part le ou et le et qui se remplacent par des symboles (|| pour ou et && pour et))
pour résumer (mais lis quand même le reste ca te servira^^) tu dois déclarer ta variable langue de type String puis dans ton switch mettre tes différentes possibilités comme tu le ferais avec un if en respectant la syntaxte du switch (qui est juste dans ton code a part les quotes ('') qu'on ne met pas pour des chaines)
voila j'espère que tu comprend mieux (et surtout n'abandonne pas les switchs finiront par te servir vraiment si tu veux faire des codes assez gros pcq au bout d'un moment tu verras que des if else if finissent par devenir ingérable si tu as trop de possibilités)
On peux également transformer (presque par magie) des Strings en int pour pouvoir les switcher mais ça nécessite une petite étape préliminaire (que j'ai mis en commentaire dans le main)
J'ai également mis le gros truc qui te manque c'est à dire utiliser les arguments pour que les valeurs varient !
J'ai également mis le gros truc qui te manque c'est à dire utiliser les arguments pour que les valeurs varient !
public class Salut { protected static void convertir(String langue) { System.out.println(langue+"\t"+langue.hashCode()); } private static final int fr=3276, // convertir("fr") en=3241, // convertir("en") ar=3121; // convertir("ar") public static void main(String [] args) { /* convertir("fr"); // 3276 convertir("en"); // 3241 convertir("ar"); // 3121 */ //* if (args.length==0) { System.err.println("Un argument de langue requis !"); return; } int langue = args[0].hashCode(); switch (langue) { case fr: System.out.println("Salut !"); break; case en: System.out.println("Hello"); break; case ar: System.out.println("assalamou alikoum"); break; default: System.out.println("'"+langue+"' n'est pas une langue reconnue"); System.out.println("Langues acceptées : 'fr', 'en', 'ar'"); } //*/ } }
Le hashcode sert principalement pour les collections implémentées avec des tables de hachage comme HashTable, HashMap, HashSet...
En fait il est plus efficace de travailler dans des collections de données triées. On peut ainsi faire des manipulations plus rapides sur ces collections. Le problème c'est qu'il serait en général trop lourd de comparer à chaque fois toutes les données de deux objets pour savoir s'ils sont égaux.
On se sert donc de hashcode qui permet de déduire rapidement une propriété de l'objet. Ça donne un entier tel que deux objets égaux ont le même hashcode. Attention, pour deux hashcodes identiques on peux avoir deux objets différents, dans ce cas là on est obligé d'appeler la méthode equals pour comparer totalement les objets, mais dans la plupart des cas on peut s'en passer car on aura trouvé avant que le hashcode est différent.
Ici c'est ce que je fais, plutôt que de comparer les String : if (s1.equals(s2)) j'utilise directement le hashcode car c'est un entier et peut donc être switché : switch (s1.hashCode()) case s2.hashcode() :
Il est évident que l'on pourrait avoir d'autre String que "fr" qui ait le hashcode 3276, mais il faudrait vraiment le faire exprès pour tomber dessus, alors que par contre on est sûr que si langue est égal à "fr" on aura bien son hashcode à 3276, et du coup on peux s'en servir dans le switch...
Comme je le disais c'est un peu magique, mais ça marche ^^
Remarque : pour "fr" on a 3276, car 'f'=102, 'r'=114, et que hashcode=102*31+114.
Je ne sors pas la formule du néant, elle est dans la documentation...
À voir donc : Object.equals(Object), Object.hashcode(), et en particulier String.hashcode()
En fait il est plus efficace de travailler dans des collections de données triées. On peut ainsi faire des manipulations plus rapides sur ces collections. Le problème c'est qu'il serait en général trop lourd de comparer à chaque fois toutes les données de deux objets pour savoir s'ils sont égaux.
On se sert donc de hashcode qui permet de déduire rapidement une propriété de l'objet. Ça donne un entier tel que deux objets égaux ont le même hashcode. Attention, pour deux hashcodes identiques on peux avoir deux objets différents, dans ce cas là on est obligé d'appeler la méthode equals pour comparer totalement les objets, mais dans la plupart des cas on peut s'en passer car on aura trouvé avant que le hashcode est différent.
Ici c'est ce que je fais, plutôt que de comparer les String : if (s1.equals(s2)) j'utilise directement le hashcode car c'est un entier et peut donc être switché : switch (s1.hashCode()) case s2.hashcode() :
Il est évident que l'on pourrait avoir d'autre String que "fr" qui ait le hashcode 3276, mais il faudrait vraiment le faire exprès pour tomber dessus, alors que par contre on est sûr que si langue est égal à "fr" on aura bien son hashcode à 3276, et du coup on peux s'en servir dans le switch...
Comme je le disais c'est un peu magique, mais ça marche ^^
Remarque : pour "fr" on a 3276, car 'f'=102, 'r'=114, et que hashcode=102*31+114.
Je ne sors pas la formule du néant, elle est dans la documentation...
À voir donc : Object.equals(Object), Object.hashcode(), et en particulier String.hashcode()
j'ai essayer ca:
public class salut {
public static void main(String [] args){
String fr;
String ar;
String en;
char langue = 0;
switch (langue){
case 'f':
System.out.println("salut");
break;
case 'e':
System.out.println("Hello");
break;
case 'a':
System.out.println("assalamou alikoum");
break;
default:
System.out.println("erreur");
break;
}
}
}
mais le problème est tjr persistant on m'affiche le 3em print "erreur"
et kan j'essaye autre chose genre:
public class salut {
public static void main(String [] args){
String fr;
String ar;
String en;
char langue;
switch (langue){
case 'fr':
System.out.println("salut");
break;
case 'en':
System.out.println("Hello");
break;
case 'ar':
System.out.println("assalamou alikoum");
break;
default:
System.out.println("erreur");
break;
}
}
}
la 1er erreur revient sur "fr" on m'écrit: Invalid character constant!!!!
je c pas quoi faire on m'a conseiller de travailler avec les arguments mais j'ai pas cu comment je voulait afficher un msg qui permet de choisir la langue fr en ou ar puis qui affiche le msg selon la langue choisi alor si quelqu'un pourrait trouver la source de l'erreur ou bien sait comment travailler avec les arguments ou meme a une touts autre solution je suis preunneuse a 200000000000000000000% merci
public class salut {
public static void main(String [] args){
String fr;
String ar;
String en;
char langue = 0;
switch (langue){
case 'f':
System.out.println("salut");
break;
case 'e':
System.out.println("Hello");
break;
case 'a':
System.out.println("assalamou alikoum");
break;
default:
System.out.println("erreur");
break;
}
}
}
mais le problème est tjr persistant on m'affiche le 3em print "erreur"
et kan j'essaye autre chose genre:
public class salut {
public static void main(String [] args){
String fr;
String ar;
String en;
char langue;
switch (langue){
case 'fr':
System.out.println("salut");
break;
case 'en':
System.out.println("Hello");
break;
case 'ar':
System.out.println("assalamou alikoum");
break;
default:
System.out.println("erreur");
break;
}
}
}
la 1er erreur revient sur "fr" on m'écrit: Invalid character constant!!!!
je c pas quoi faire on m'a conseiller de travailler avec les arguments mais j'ai pas cu comment je voulait afficher un msg qui permet de choisir la langue fr en ou ar puis qui affiche le msg selon la langue choisi alor si quelqu'un pourrait trouver la source de l'erreur ou bien sait comment travailler avec les arguments ou meme a une touts autre solution je suis preunneuse a 200000000000000000000% merci
Tu ne modifies jamais ton char langue, il vaut toujours 0 ou alors n'est pas initialisé, et ça ne correspond à aucun des cas filtrés par ton switch il est donc évident qu'il rentre toujours dans le default qui t'affiche "erreur" ou alors ça plante car comme on te la déjà dit les caractères ne doivent avoir qu'une seule lettre !
en fait il y a un problème, des char c'est UN caractère 'f' ou 'a' . Pour plusieurs caractères, il te faut des String. "fr"
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
char langue,fr,ar,en;;
si c'est un copié collé de ton code tu déclare 4 variables de type char alors qu'il faudrait des String
String langue;
et ton switch comme tu l'as mis sans les quotes (c'est pas des caractères)
par contre je suis pas sur que le switch marche avec les String faudra voir quand t'auras corrigé (j'ai pas le courage de tester^^)
et évite de mettre 2 ; ton compilateur risque de pas aimer^^
si c'est un copié collé de ton code tu déclare 4 variables de type char alors qu'il faudrait des String
String langue;
et ton switch comme tu l'as mis sans les quotes (c'est pas des caractères)
par contre je suis pas sur que le switch marche avec les String faudra voir quand t'auras corrigé (j'ai pas le courage de tester^^)
et évite de mettre 2 ; ton compilateur risque de pas aimer^^
bonjour,
le probleme est que tu n'as pas besoin de 4variables pour faire ton switch, une seule suffirait (laisse la variable langue), à cette derniere tu affecte une valeur que tu veux (fr, ar, ang ...) et c'est cette valeur que tu vas faire ton switch
dans ton code tu declare fr, ar, .. comme etant des varibales hors que tu les mets comme etant des chaines (et meme pas puisque tu les met entre ' '), du coup ça genere des erreurs.
le probleme est que tu n'as pas besoin de 4variables pour faire ton switch, une seule suffirait (laisse la variable langue), à cette derniere tu affecte une valeur que tu veux (fr, ar, ang ...) et c'est cette valeur que tu vas faire ton switch
dans ton code tu declare fr, ar, .. comme etant des varibales hors que tu les mets comme etant des chaines (et meme pas puisque tu les met entre ' '), du coup ça genere des erreurs.
RTFM ! (Read The Fucking Manual =) )
utilises des if () {} else if() {} else {}
L'instruction switch ne fonctionne que sur des types simples (int, short, char ou byte) !
https://www.commentcamarche.net/contents/552-java-les-structures-conditionelles