Preciso validar uma String ou alguma forma de entrada RESOLVIDO

primeiramente: eu iniciei java esse ano na faculdade, então n tnho dominio sobre a linguagem .
Preciso que a entrada string seja validada como variavel, pq eu so posso da entrada com string, ja n sei como resolver isso, grata

import java.util.Scanner;
public class questao2 {
static Scanner scn;

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

    public static void resposta(){
    	boolean sair = false;
	    int pesoC, pesoG, idadeC, idadeG, cao, gato,total; 
	    String tipo, sexo;
	  
		do{
			System.out.print("Digite C para cão, G para gato e X para Sair ");
			tipo = scn.nextLine();
			
		try {
			if( tipo == X) {
				sair = true;

			}else{
				if((tipo == C) ||(tipo == G)) {
					if(tipo == C) {
						cao++;
						System.out.print("Digite a idade em meses : ");
						idade = scn.nextInt();
						System.out.ptiny("Digite M para macho e F para femea");
						sexo = scn.nextLine();
						System.out.print("Digite o peso em kg: ");
						peso = scn.nextInt();
						
					}
					if(tipo == G) {
						gato++;
						System.out.print("Digite a idade em meses : ");
						idade = scn.nextInt();
						System.out.ptiny("Digite M para macho e F para femea");
						sexo = scn.nextLine();
						System.out.print("Digite o peso em kg: ");
						peso = scn.nextInt();
						
					}
				}else{
					System.out.print("Opção invalida, tente novamente");
				}
			}
		}catch (NumberFormatException e){
            System.out.println("Opção Invalida");
            scn.next();
		}
		}while(sair = false);
		
		total = cao + gato;
			System.out.format("Numero total de animais atendidos: %f\nPercentual de caes: %\nPercentual de gatos: ",total, cao, gato);
    
    
	
}

}

Primeiro, não é recomendado usar == para comparar Strings.
Use equals() ou equalsIgnoreCase().

Vejo que vc quer verificar se digitaram “C”, “G” ou “X”.
Use algo como tipo.equalsIgnoreCase(“C”)

Faça o mesmo para as outras opções.

obrigada! vou tentar!

1 curtida

Já experimentou fazer com switch / case ?

E if (tipo.equals(“X”) { break; }

Outra coisa:

while (!sair);

Apenas um “=” é atribuição de valor.

Conseguiu fazer dar certo?

1 curtida

sair é um boolean, então seria apenas:

while (! sair);
1 curtida

Funciona com equals, agr meu problema é que entra em loop e é isso`

do{
			System.out.print("Digite C para cão, G para gato e X para Sair ");
			tipo = scn.nextLine();
			
			
		try {
			if((tipo.equals("C")) ||(tipo.equals("G")) || (tipo.equals("X"))) {
			
				if(tipo.equals("X")) {
				sair = true;
			}
			if(tipo.equals("C")) {
				cao++;
				System.out.print("Digite a idade em meses : ");
				idadeC = scn.nextInt();
				System.out.println("Digite M para macho e F para femea");
				sexo = scn.next();
				System.out.println("Digite o peso em kg: ");
				pesoC = scn.nextInt();
				maior = idadeC;
						
				if (idadeC < maior) {
					maior = idadeC;
				}
			}
				
			if(tipo.equals("G")) {
				gato++;
				System.out.print("Digite a idade em meses : ");
				idadeG = scn.nextInt();
				System.out.println("Digite M para macho e F para femea");
				sexo = scn.next();
				System.out.println("Digite o peso em kg: ");
				pesoG = scn.nextInt();
					
				menor = idadeG;
				if (idadeG < menor) {
					menor = idadeG;
					menorP = pesoG;
				}
			}
			
			}else{
				//System.out.println("Opção invalida, tente novamente\n");
			}
		}catch (InputMismatchException e){
            System.out.println("Opção Invalida"+e);
		}	
		}while(sair = true);
		
		total = cao + gato;
		caoP = (cao* 100)/total;
		gatoP = (gato*100)/total;
				
		System.out.format("Numero total de animais atendidos: %f\nPercentual de caes: %f\nPercentual de gatos: %f\nCão mais veio: %f\nPeso da gatinha nene: ",total, caoP, gatoP);
    
}
do {
    ...
} while ( !sair );

ou

do {
    ...
} while ( sair == false );

Teve uma linha que ficou ptiny ao invés de print

O operador = é de atribuição. Ou seja, sair recebe o valor true, e depois o while verifica se o valor é true (e no caso, sempre será).

Para comparar, use ==:

while(sair == true);

Se bem que para valores booleanos é desnecessário comparar desta forma, basta fazer:

while(sair);

Na verdade pela lógica dela tem que ser while (!sair).

1 curtida

Sim, a gente já tinha falado isso anteriormente, sei lá porque ela mudou (não testei o código porque estou no celular, só dei uma olhada por cima e vi esse erro)

import java.util.Scanner;

public class questao2 {

public static void main(String[] args) {

	Scanner scn;
	scn = new Scanner(System.in);

	boolean sair = false;
	int peso, idade, cachorro, gato, total;
	String tipo, sexo;
	
	cachorro = 0;
	gato = 0;

	do {
		System.out.println("\nDigite C para cachorrinho, G para gato e X para sair: ");
		tipo = scn.nextLine();

		try {
			if (tipo.equalsIgnoreCase("X")) {
				sair = true;

			} else if (tipo.equalsIgnoreCase("C")) {
						cachorro++;
						System.out.println("Digite a idade, em meses: ");
						idade = Integer.parseInt(scn.nextLine());
						System.out.println("Digite M para macho ou F para femea: ");
						sexo = scn.nextLine();
						System.out.println("Digite o peso, em kg: ");
						peso = Integer.parseInt(scn.nextLine());

					} else if (tipo.equalsIgnoreCase("G")) {
						gato++;
						System.out.println("Digite a idade, em meses: ");
						idade = Integer.parseInt(scn.nextLine());
						System.out.println("Digite M para macho ou F para femea: ");
						sexo = scn.nextLine();
						System.out.println("Digite o peso, em kg: ");
						peso = Integer.parseInt(scn.nextLine());

				} else {
					System.out.print("Opção invalida, tente novamente");
				}
		} catch (NumberFormatException e) {
			System.out.println("Opção Invalida");
			scn.next();
		}
	} while (!sair);

	total = cachorro + gato;
	System.out.println("Numero total de animais atendidos: " + total);
	System.out.println("Numero de cachorros: " + cachorro + " = " + ((cachorro*100)/total) + "%");
	System.out.println("Numero de gatos: " + gato + " = " + ((gato*100)/total) + "%");

}

}
2 curtidas

Eu fiquei tanto tempo em cima q deu nó na cabeça, mas consegui resolver, só n cheguei a postar o codigo aqui, pois estava fazendo outras coisas ao mesmo tempo e estava difcil dar atenção, grata a todos pela ajuda!

Meu codigo final ficou assim:

import java.util.InputMismatchException;
import java.util.Scanner;

public class questao2 {
static Scanner scn;

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

}

public static void resposta(){
    	boolean sair = false;
	    int pesoC, pesoG, idadeC, idadeG, cao=0, gato=0,total=0, caoP, gatoP; 
	    String tipo, sexo ;
	    int maior =0, menor=0, menorP=0;
	
	  
		do{
			System.out.print("Digite C para cão, G para gato e X para Sair ");
			tipo = scn.nextLine();
			
			
		try {
			if((tipo.equals("C")) ||(tipo.equals("G")) || (tipo.equals("X"))) {
			
				if(tipo.equals("X")) {
				sair = true;
			}
			if(tipo.equals("C")) {
				cao++;
				System.out.print("Digite a idade em meses : ");
				idadeC = scn.nextInt();
				System.out.println("Digite M para macho e F para femea");
				sexo = scn.next();
				System.out.println("Digite o peso em kg: ");
				pesoC = scn.nextInt();
				maior = idadeC;
						
				if (idadeC < maior) {
					maior = idadeC;
				}
			}
				
			if(tipo.equals("G")) {
				gato++;
				System.out.print("Digite a idade em meses : ");
				idadeG = scn.nextInt();
				System.out.println("Digite M para macho e F para femea");
				sexo = scn.next();
				System.out.println("Digite o peso em kg: ");
				pesoG = scn.nextInt();
					
				menor = idadeG;
				if (idadeG < menor) {
					menor = idadeG;
					menorP = pesoG;
				}
			}
			
			}
			
		}catch (InputMismatchException e){
            System.out.println("Opção Invalida"+e);
		}	
		}while(sair != true);
		
		total = cao + gato;
		caoP = (cao* 100)/total;
		gatoP = (gato*100)/total;
				
		System.out.println("Numero total de animais atendidos:"+total);
		System.out.println("Numero de caes:"+cao);
		System.out.println("Percentual de caes:"+caoP);
		System.out.println("Numero de gatos:"+gato);
		System.out.println("Percentual de gatos:"+gatoP);
		System.out.println("Cão mais veio:"+ maior);
		System.out.println("Peso da gatinha nene:"+menorP);
		
		
}			

}