[RESOLVIDO]Comparacao de char com letra

10 respostas
I

Galera e o seguinte eu tenho que resolver o exercicio onde eu digito um numero(para saber o tanto de vezes que eu vou rodar no laco) e a cada vez que eu rodo no laço tenho que digitar um numero(quantas cobaias) e um letra(tipo de cobaia), so que eu nao to consseguindo fazer a comparaçao com a letra que um variavel de tipo char

import java.util.Scanner;
import java.util.Locale;

public class Main{

	public static void main(String[] args){
	
		Scanner entradaTeclado = new Scanner(System.in);
		int numTeste = entradaTeclado.nextInt();
		int numCobaia;
		int contRato = 0;
		int contSapo = 0;
		int contCoelho = 0;
		int totalCobaia = 0;
		double porcentagemRato;
		double porcentagemSapo;
		double porcentagemCoelho;
		char tipoCobaia;
		
		for(int cont = 0; cont < numTeste; cont++){
			numCobaia = entradaTeclado.nextInt();
			tipoCobaia = entradaTeclado.next().charAt(0);
			if(tipoCobaia == "R"){
				contRato += numCobaia;
			}else if(tipoCobaia == "S"){
				contSapo += numCobaia;
			}else if(tipoCobaia == "C"){
				contCoelho += numCobaia;
			}
			totalCobaia += numCobaia;
		}
		
		porcentagemCoelho = (contCoelho * 100) / totalCobaia;
		porcentagemRato = (contRato * 100) / totalCobaia;
		porcentagemSapo = (contSapo * 100) / totalCobaia;
		
		System.out.printf("Total: %d cobaias\n", numCobaia);
		System.out.printf("Total de coelhos: %d\n", contCoelho);
		System.out.printf("Total de ratos: %d\n", contRato);
		System.out.printf("Total de sapos: %d\n", contSapo);
		System.out.printf(Locale.US, "Percentual de coelhos: %.2f", porcentagemCoelho);
		System.out.printf(Locale.US, "Percentual de ratos: %.2f", porcentagemRato);
		System.out.printf(Locale.US, "Percentual de sapos: %.2f", porcentagemSapo);
	
	}

}

como faço para comparar um char com letra??(o problema esta nas comparaçoes dentro do meu laço).

10 Respostas

douglaskd
ivanGuima:
Galera e o seguinte eu tenho que resolver o exercicio onde eu digito um numero(para saber o tanto de vezes que eu vou rodar no laco) e a cada vez que eu rodo no laço tenho que digitar um numero(quantas cobaias) e um letra(tipo de cobaia), so que eu nao to consseguindo fazer a comparaçao com a letra que um variavel de tipo char
import java.util.Scanner;
import java.util.Locale;

public class Main{

	public static void main(String[] args){
	
		Scanner entradaTeclado = new Scanner(System.in);
		int numTeste = entradaTeclado.nextInt();
		int numCobaia;
		int contRato = 0;
		int contSapo = 0;
		int contCoelho = 0;
		int totalCobaia = 0;
		double porcentagemRato;
		double porcentagemSapo;
		double porcentagemCoelho;
		char tipoCobaia;
		
		for(int cont = 0; cont < numTeste; cont++){
			numCobaia = entradaTeclado.nextInt();
			tipoCobaia = entradaTeclado.next().charAt(0);
			if(tipoCobaia == "R"){
				contRato += numCobaia;
			}else if(tipoCobaia == "S"){
				contSapo += numCobaia;
			}else if(tipoCobaia == "C"){
				contCoelho += numCobaia;
			}
			totalCobaia += numCobaia;
		}
		
		porcentagemCoelho = (contCoelho * 100) / totalCobaia;
		porcentagemRato = (contRato * 100) / totalCobaia;
		porcentagemSapo = (contSapo * 100) / totalCobaia;
		
		System.out.printf("Total: %d cobaias\n", numCobaia);
		System.out.printf("Total de coelhos: %d\n", contCoelho);
		System.out.printf("Total de ratos: %d\n", contRato);
		System.out.printf("Total de sapos: %d\n", contSapo);
		System.out.printf(Locale.US, "Percentual de coelhos: %.2f", porcentagemCoelho);
		System.out.printf(Locale.US, "Percentual de ratos: %.2f", porcentagemRato);
		System.out.printf(Locale.US, "Percentual de sapos: %.2f", porcentagemSapo);
	
	}

}

como faço para comparar um char com letra??(o problema esta nas comparaçoes dentro do meu laço).

ja testou usando letras minusculas, ou apertando o capslock ?

drsmachado

Nunca, jamais, em hipótese alguma compare objetos assim

if(tipoCobaia == "R"){

Objetos são “filhos” da classe java.lang.Object e, assim sendo, devem ser comparados através do método equals que é herdado da superclasse.
A comparação com o duplo igual é feita somente para tipos primitivos. Fica como exercício verificar quais são os tipos primitivos de java.
Outra coisa

ivanGuima:
consseguindo
não existe. Não assassine o português. O correto é conseguindo.

douglaskd

drs ele esta usando char… não é String não…

mauricioadl

Ta usando String sim, para ser char tem que usar aspas ‘simples’, dae o == vai funcionar

xD

if(drsmachado == professor Pasquale) {

kkkkk

}
douglaskd

Ta usando String sim, para ser char tem que usar aspas ‘simples’, dae o == vai funcionar

xD

if(drsmachado == professor Pasquale) {

kkkkk

}</blockquote>

bem observado hehe… aspas simples

mas ali é tipo premitivo olha a declaração, char…

só ele fazer:

if(tipoCobaia == 'r'){
drsmachado
<blockquote><div class="quote-author">mauricioadl:</div>

if(drsmachado == professor Pasquale) {

kkkkk

}</blockquote>

Também com equals…
I

conssegui galera eu largui o 'if' e usei o swtch

import java.util.Scanner;
import java.util.Locale;

public class Main{

	public static void main(String[] args){
	
		Scanner entradaTeclado = new Scanner(System.in);
		int numTeste = entradaTeclado.nextInt();
		int numCobaia;
		int contRato = 0;
		int contSapo = 0;
		int contCoelho = 0;
		int totalCobaia = 0;
		double porcentagemRato;
		double porcentagemSapo;
		double porcentagemCoelho;
		char tipoCobaia;
		char teste = '\u0025';
		
		for(int cont = 0; cont < numTeste; cont++){
			numCobaia = entradaTeclado.nextInt();
			tipoCobaia = entradaTeclado.next().charAt(0);
			switch(tipoCobaia){
				case 'R' : contRato += numCobaia;
				break;
				case 'S' : contSapo += numCobaia;
				break;
				case 'C' : contCoelho += numCobaia;
				break;
			}
			totalCobaia += numCobaia;
		}
		
		porcentagemCoelho = (contCoelho * 100) / totalCobaia;
		porcentagemRato = (contRato * 100) / totalCobaia;
		porcentagemSapo = (contSapo * 100) / totalCobaia;
		
		System.out.printf("Total: %d cobaias\n", totalCobaia);
		System.out.printf("Total de coelhos: %d\n", contCoelho);
		System.out.printf("Total de ratos: %d\n", contRato);
		System.out.printf("Total de sapos: %d\n", contSapo);
		System.out.printf(Locale.US, "Percentual de coelhos: %.2f %c\n", porcentagemCoelho, teste);
		System.out.printf(Locale.US, "Percentual de ratos: %.2f %c\n", porcentagemRato, teste);
		System.out.printf(Locale.US, "Percentual de sapos: %.2f %c\n", porcentagemSapo, teste);
	
	}

}

so que agora estou com outro problema, quando vo imprimi o resultado em percentual
se eu entrar com esses dados:
10
10 C
6 R
15 S
5 C
14 R
9 C
6 R
8 S
5 C
14 R

O resultado era pra sair assim:
Total: 92 cobaias
Total de coelhos: 29
Total de ratos: 40
Total de sapos: 23
Percentual de coelhos: 31.52 %
Percentual de ratos: 43.48 %
Percentual de sapos: 25.00 %

so que depois da virgula ta sainda tudo com 0.
Pq ta acontecendo isso?

E
(contCoelho * 100) / totalCobai

A divisão de dois números inteiros é um número inteiro.

Para corrigir o seu programa, não use 100 e sim 100.0 (que é um double). Ou seja,

(contCoelho * 100.0) / totalCobai
I

Deu certo aki.
Vlw galera pela ajuda.

drsmachado
<blockquote><div class="quote-author">ivanGuima:</div>conssegui galera eu largui o ‘if’ e usei o swtch

tipoCobaia = entradaTeclado.next().charAt(0);

switch(tipoCobaia){

case ‘R’ : contRato += numCobaia;

break;

case ‘S’ : contSapo += numCobaia;

break;

case ‘C’ : contCoelho += numCobaia;

break;

}</blockquote>

Algumas dicas:

Os métodos nextInt, nextFloat, nextBoolean, nextXxx podem apresentar problemas para ti. Prefira usar o nextLine() e fazer as conversões necessárias.

Segundo, você está usando
tipoCobaia = entradaTeclado.next().toUpperCase().charAt(0);
switch(tipoCobaia){
//
case 'R' :

E se o usuário não estiver com o caps lock ativado e não usar a tecla shift para digitar a entrada? Você não entrará em nenhum dos cases.
Sugiro colocar:

tipoCobaia = entradaTeclado.next().charAt(0);
//
case 'R' :

Fica mais fácil.

Criado 26 de julho de 2013
Ultima resposta 26 de jul. de 2013
Respostas 10
Participantes 5