Comparar o Char argumento com o outro Char

15 respostas
Alkamavo

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:

15 Respostas

maquiavelbona

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é!

Alkamavo

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);
		         
		  }
doug

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

Alkamavo

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

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…

doug

É 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

Alkamavo

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");

		}

		}
Andre_Brito

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

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.

T
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").

Alkamavo

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").

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:

Andre_Brito

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

Alkamavo

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!!!

T

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;
}
Andre_Brito

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:

T
#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.)

V

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!!!

Criado 15 de janeiro de 2008
Ultima resposta 7 de dez. de 2012
Respostas 15
Participantes 6