Pb d'erreur avec java

Résolu/Fermé
Profil bloqué - 20 avril 2011 à 21:11
 Profil bloqué - 24 avril 2011 à 20:13
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


A voir également:

8 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
20 avril 2011 à 22:07
On ne peux pas faire de switch sur des String !
2
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
20 avril 2011 à 22:18
oui...

RTFM ! (Read The Fucking Manual =) )

utilises des if () {} else if() {} else {}
0
Giorgiolino Messages postés 253 Date d'inscription vendredi 15 mai 2009 Statut Contributeur Dernière intervention 2 mars 2015 52
20 avril 2011 à 22:35
Pour aller encore dans ton sens, trouvé sur ce site :

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
0
oliver3923 Messages postés 971 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 15 novembre 2014 143
21 avril 2011 à 22:11
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)
2
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
21 avril 2011 à 22:31
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 !

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'");
		}
		//*/
	} 
} 
0
oliver3923 Messages postés 971 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 15 novembre 2014 143
21 avril 2011 à 23:12
vu qu'il a du mal avec les switch c'est peut être pas le moment de l'embrouiller avec des fonction^^
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
21 avril 2011 à 23:22
Si utiliser une fonction l'embrouille, autant changer de voie maintenant et s'orienter vers la pâtisserie ^^
0
oliver3923 Messages postés 971 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 15 novembre 2014 143
22 avril 2011 à 09:23
oui mais faut qu'il apprenne a s'en servir avant sinon il va pas piger ton code

d'ailleurs ca sert a quoi hashCode()?
je connais pas comme fonction^^
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
22 avril 2011 à 11:06
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()
0
Profil bloqué
21 avril 2011 à 20:49
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
1
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 21/04/2011 à 22:02
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 !
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
Modifié par Pacorabanix le 20/04/2011 à 21:22
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"
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Profil bloqué
20 avril 2011 à 21:45
mais le problem c que j'ai mis string et c tjr pareil !!!
0
oliver3923 Messages postés 971 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 15 novembre 2014 143
Modifié par oliver3923 le 20/04/2011 à 22:43
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^^
0
malaik5 Messages postés 258 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 28 novembre 2013 33
21 avril 2011 à 11:28
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.
0
Profil bloqué
21 avril 2011 à 22:28
merci oliver3923 c vrement tro gentil de ta part en plus ta reponse ma becoup aider a voire le vrai sens du switch merci encor
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
22 avril 2011 à 00:03
et tu verras, l'histoire qu'une variable doit être remplie par quelque chose, et qu'on oublie de le faire, ça revient très souvent en programmation, pas qu'avec le switch.

bonne continuation
0
Profil bloqué
24 avril 2011 à 20:13
merci c très gentil de ta part
0