Comparar o Char argumento com o outro Char

boas gente do Guj …o Alkamavo este numa alhada…

preciso comparar um char que é passa como argumento numa função!!!

public static int Comandos(char cmd) 
		{
			
			
			//inserir companhia
			if (strcmp(cmd , "IC")==0)		
				return 1;
			//remover companhia
			else if (strcmp(str, "RA")==0)		
				return 2;
			//inserir voo
			else if (strcmp(str, "IV")==0)	
				return 3;
			//inserir novo horario de voo
			else if (strcmp(str, "AV")==0)	
				return 4;			
			//remover voo
			else if (strcmp(str, "RV")==0)	
				return 5;
			//inserir localidade
			else if (strcmp(str, "IL")==0)	
				return 6;		
			//inserir local turistico em localidade
			else if (strcmp(str, "ILL")==0)	
				return 7;
			//remover local turistico em localidade
			else if (strcmp(str, "RLL")==0)	
				return 8;
			//consulta companhia
			else if (strcmp(str, "CC")==0)	
				return 9;
			//consulta voo companhia
			else if (strcmp(str, "CVC")==0)	
				return 10;
			//consulta voo
			else if (strcmp(str, "CV")==0)		
				return 11;
			//consulta localidade
			else if (strcmp(str, "CL")==0)	
				return 12;	
			//consulta local turistico em localidade
			else if (strcmp(str, "CLL")==0)	
				return 13;			
			//consulta voos q partem de 1 localidade
			else if (strcmp(str, "CVL")==0)	
				return 14;			
			//consulta voos directos p 1 itenerario num dado dia de partida
			else if (strcmp(str, "CVDI")==0)	
				return 15;			
			//consulta voos p 1 dado itenerario n1 dado dia de partida
			else if (strcmp(str, "CVI")==0)	
				return 16;
			//sair e gravar ficheiro
			else if (strcmp(str,"S")==0)
				return 17;
			else
				return -1;
		}

o codigo ta em C++ desculpe la …
mas eu consgui fazer em c…
mas em java n consigo como fazer isso.Ja pensei em passar para String…mas…hum n chego la…
se houve uma string compare…ou melhor se os metodos da string fossem tb para os chars era muito bom…
aguardo ajuda companheiros…
ja tou na Main()
o projecto ta mesmo no fim…

:oops:

char é tipo primitivo então a comparação é feita por == e só com tipos compatíveis (int, byte). Só que char é só 1 char, então não poderias comparar com “IC”. Para comparar Strings, a própria classe String tem um método de comparação de igualdade e um de qualidade.
Nesses casos e em muitos outros, leia a documentação.

Até!

estive a ler mesmo agora e tens razao o char é util noutros casos…e neste estava a me ser traiçoeiro…
Eu fui por este caminho porque a prof me atraiçoou…mas a gaja é boa demais e tou sempre a ouvir o k ela me diz… :twisted:

fiz assim

public static int Comandos(String cmd) 
		{
			
			
			//inserir companhia
			if ((cmd.compareTo("IC")==0))		
				return 1;
			//remover companhia
			else if (cmd.compareTo("RA")==0)		
				return 2;
}

e agora como vou ter uma linha para introduzir os dados com o Scanner in

ex: IC nome morada viatura
e eu kero apenas o “IC” que é o comando para a operação depois ver a comparaçao na minha funçao acima…


 String linha=console.nextLine();
   //String [] Comando=linha.split("");
   
   for(;;){
	   
	   while(console.hasNext()){
		  // char x=linha.charAt(1);
		   String  cmd=linha.substring(1);
		   Comandos(cmd);
		         
		  }

Olá rapaz
tenta usar o .equals ou .contains ao inves de compareTo… isso deve te ajudar

ficarica +/- assim: cmd.equals(“IC”) => isso te retorna true ou false
também tem isso
cmd.contains(“IC”) => retorna true ou false

flessss
espero ter ajudado

[quote=thiago.filadelfo]Olá rapaz
tenta usar o .equals ou .contains ao inves de strcomp… isso deve te ajudar

ficarica +/- assim: cmd.equals(“IC”) => isso te retorna true ou false
também tem isso
cmd.contains(“IC”) => retorna true ou false

flessss
espero ter ajudado
[/quote]

thiago…para o char estes metodos n existem…
mas ja tentei de uma forma k ja postei acima e parece k resulta…mas mesmo assim obrigado pela força…

valeu…

É tem razão para o char naum tem, somente praa String

dai ele tem o equals… acho ateh melhor que o compareTo.!!
ae vc esta escrevendo o equals na mão… resumindo!!

Mas se funcionou… sem problemas…

de nada pela força…
qq coisa estamos aqui…
flwsss

Boas amigos…
Ja resolvi o problema por completo…e como pode ser que alguem amanha tenha o mesmo problema…vou Postar o Codigo.

Se introduzir por exemplo : IC mac pr
transforma em :ICmacpr e so me pega o IC k é o comando…

valeu ajuda de todos…

public static int Comandos(String cmd) {

		// inserir veiculo
		if ((cmd.compareTo("IV") == 0))
			return 1;
		// Inserir acidente
		else if (cmd.compareTo("IA") == 0)
			return 2;
		// Remover acidente
		else if (cmd.compareTo("RA") == 0)
			return 3;
		// Consultar acidente
		else if (cmd.compareTo("CA") == 0)
			return 4;
		// Consulta Cadastro de um veiculo
		else if (cmd.compareTo("CV") == 0)
			return 5;
		// Consulta Cadastro de um proprietario ou condutor
		else if (cmd.compareTo("CP") == 0)
			return 6;
		// Pesquisa os Piores Condutores
		else if (cmd.compareTo("PC") == 0)
			return 7;

		else
			return -1;
	}

	public static void main(String[] args) {
		Scanner console = new Scanner(System.in);

		GestorAcidentes aux = Load();
	

			out.println("BEM-Vindo ao Sistema de Gestao de Acidentes" + "\n"
					+ "Digite a Sua Operação"+"\n");
			// TODO Auto-generated method stub
			
			String linha = console.nextLine().trim();
			String cmd = linha.substring(0,2);


	if  (Comandos(cmd) == 2) {
				out.println("comando:" + Comandos(cmd));

			} else
				out.println("COmandos Invalidos");

		}

		}

[quote=thiago.filadelfo]É tem razão para o char naum tem, somente praa String

dai ele tem o equals… acho ateh melhor que o compareTo.!!
ae vc esta escrevendo o equals na mão… resumindo!!

Mas se funcionou… sem problemas…

de nada pela força…
qq coisa estamos aqui…
flwsss[/quote]

Acho que não é só pra String mas é pra qualquer objeto. Afinal, todos herdam de Object e http://java.sun.com/javase/6/docs/api/java/lang/Object.html#equals(java.lang.Object)

Abraço.

         if ((cmd.compareTo("IV") == 0))  
             return 1; 

Quando vejo um código desses já sei que foi um carinha que pensa em C puro (nem em C++) que fez o código. Em C++ eu faria assim:

#include <string>
using namespace std;
...
string cmd = ...;
if (cmd == "IV") ....

Normalmente só usamos compareTo em comparações do tipo "<" ou ">"; para comparar para igualdade, o Javazeiro típico usa "equals", ou se ele for mais esperto, "equalsIgnoreCase" (que no seu caso de C seria equivalente ao "stricmp" ou "strcmpi").

[quote=thingol] if ((cmd.compareTo("IV") == 0)) return 1;

Quando vejo um código desses já sei que foi um carinha que pensa em C puro (nem em C++) que fez o código. Em C++ eu faria assim:

#include <string>
using namespace std;
...
string cmd = ...;
if (cmd == "IV") ....

Normalmente só usamos compareTo em comparações do tipo "<" ou ">"; para comparar para igualdade, o Javazeiro típico usa "equals", ou se ele for mais esperto, "equalsIgnoreCase" (que no seu caso de C seria equivalente ao "stricmp" ou "strcmpi").

[/quote]

hehehehe
Eu ainda uso o C como aprendi com a velha guarda de linguagem.Afinal alguém deve manter a tradição em Pé…e nao deixar morrer os velhos hábitos…

:oops: :oops:

Amém!
Mas evolua também… eu já larguei o C pro C++.

ja passei em Cobal
depois C
depois C++
depois ML (Ocaml)
Agora tou em Java…isso nao é evoluçao?
apenas no codigo acima estou a perservar os bons Costumes…do C puro…

amém!!!

Na verdade, em C++ eu faria algo parecido com o seguinte (não estou criando uma classe aqui, mas ponha uma definição de classe como quiser):

#include <string>
#include <map>
using namespace std;

enum Comandos {
   IC = 1, RA, AV, RV, IL, RLL, CC, CVC, CV, CL, CLL, CVL, CVDI, CVI, S
};
map<string,Comandos> mapNome2Comandos;
#define CMD(x) \
    mapNome2Comandos [#x] = Comandos::x
void inicializarComandos() {
    CMD(IC); CMD(RA); CMD(AV); CMD(RV); CMD(IL); CMD(RLL);
    CMD(CC); CMD(CVC); CMD(CV); CMD(CL); CMD(CLL); CMD(CVL);
    CMD(CVDI); CMD(CVI); CMD(S);
}
Comandos procurarComandos (const string& nomeComando) {
    if (mapNome2Comandos.find(nomeComando) == mapNome2Comandos.end())
        return -1;
    else
        return mapNome2Comandos (nomeComando);
}
int main(int argc, char*argv[] {
    inicializarComandos();
    Comandos cmd = procurarComandos ("IV");
    cout << cmd << endl;
}

thingol,

Ainda não consigo entender essas diretivas define que vocês veteranos usam tanto… peguei o código de uns caras no topcoder… pelamor… tinha umas 10 linhas de código normal mesmo, o resto era só diretiva. Não entendi NADA. Nem a main dele, porque ele usava todas as diretivas… não entendo direito.

Alkamavo,

CML hein? Fácil fazer produto de matrizes, não é? A x B?
Será que o Matlab é a evolução das CML’s?

Aliás, evolui legal… eu só pensei que o C e o C++ viesse depois da ML (o C nem tanto).

Só não me venha com ponteiros… PELAMORDEDEUS! É muito confuso pra novato, como eu, aprender essas de passar por parâmetro &, *, &(&)… acessar com -> uma struct… Ainda chego lá :slight_smile:

 #define CMD(x) \  
     mapNome2Comandos [#x] = Comandos::x  
 void inicializarComandos() {  
     CMD(IC); CMD(RA); CMD(AV); CMD(RV); CMD(IL); CMD(RLL);  
     CMD(CC); CMD(CVC); CMD(CV); CMD(CL); CMD(CLL); CMD(CVL);  
     CMD(CVDI); CMD(CVI); CMD(S);  
 } 

O segredo do meu #define é o operador “#”. Ele serve para transformar o argumento da macro em uma constante string. Por exemplo, CMD(IC) é expandido para:

mapNome2Comandos ["IC"] = Comandos::IC

Macros são poderosas mas você tem de saber exatamente o que está fazendo.

(Aliás, você está achando que o comando mapNome2Comandos [“IC”] é parecido com Javascript, não? É que o template map redefiniu o operador [] para poder fazer o equivalente do “put” da interface java.util.Map do Java. Então eu posso usar o map como se fosse um daqueles arrays associativos do Javascript.)

Então parece que vc quer fazer comparações com uma variável do tipo char?
se fizesse apenas com uma string daria certo?

char c = (char) 123;
String t = “”+ char;
pronto agora vc tem uma string “t” com o valor de uma char “c”!

desculpa ai se não foi isso que eu entendi!!!