Dúvida de como criar método que verifica validade

20 respostas
ksmarini

Estou estudando algoritmos e fazendo um exercício de lógica. Na parte de lógica até que está indo bem. mas não estou conseguindo criar o método que valida apenas o caracter ‘s’ ou ‘n’. Não se preocupem com o restante do código. Preciso de ajuda pra construir o método verificaOpcao. segue o que eu já fiz.

import java.util.Scanner;

public class Animais{
	public static void main(String args[]){
		char opcao = ' ';
		Scanner leitura = new Scanner(System.in);
		
		System.out.println(" \nEscolha um dentre os possiveis animais: \n "+
		" \nleao, cavalo, homem, macaco, morcego, baleia, avestruz, pinguim," +
		"pato, aguia, tartaruga, crocodilo e cobra\n");
		
		public void verificaOpcao(){
			if(opcao != 's' || opcao != 'n'){ 
				System.out.println("Resposta invalida\n");
				System.out.println("Responda s pra sim ou n para nao!\n");

			}
		}
		
		System.out.println("O animal escolhido e mamifero? ");
		opcao = leitura.next().charAt(0);
		if(opcao == 's'){
			System.out.println("mamifero");
		}

		System.out.println("O animal escolhido e uma ave? ");
		opcao = leitura.next().charAt(0);
		if(opcao == 's'){
			System.out.println("ave");
		}

		System.out.println("O animal escolhido e reptil? ");
		opcao = leitura.next().charAt(0);
		if(opcao == 's'){
			System.out.println("reptil");
		}else{
			System.out.println("O animal escolhido nao esta na lista!");
		}
	}
}

tentei fazer com boolean ao invés de void, mas aí é que eu fiquei confuso mesmo. Help-me. :?:

20 Respostas

diego.sas

Para fazer verificação de String, utiliza-se .equals…

ksmarini

diego.sas:
Para fazer verificação de String, utiliza-se .equals…

Ainda não cheguei nessa parte de Strings. Mas o importante pra mim não é a comparação e sim o que eu estou fazendo de errado no método. Se eu coloco void dá erro no construtor, se eu coloco boolean eu não tenho ideia de pra onde ir.
Tentei assim, mas tb não funciona.

public boolean verificaOpcao(char opt){
			if(opt != 's' || opt != 'n'){ 
				System.out.println("Resposta invalida\n");
				System.out.println("Responda s pra sim ou n para nao!\n");
				return false;
			}else{
				return true;
			}
		}
		
		System.out.println("O animal escolhido e mamifero? ");
		opcao = leitura.next().charAt(0);
		verificaOpcao(opcao);
		if(opcao == 's'){
			System.out.println("mamifero");
		}
diego.sas

Boa tarde ksmarini.
Depois que verifiquei que estava comparando char e não String.
Neste caso esta correto a comparação…
Acredito que deveria partir do principio na 1ª Msg…

System.out.println(" \nEscolha um dentre os possiveis animais: \n "+   
        " \nDigite 1 para escolher o leao, Digite 2 para escolher o cavalo...."); // E assim por diante

Fica mais fácil de saber o animal escolhido…

Após pode utilizar um switch/case para saber qual animal foi escolhido.

Espero ter ajudado.
abraços,

nel
diego.sas:
Para fazer verificação de String, utiliza-se .equals..

Ele está usando char, portanto, a verificação está correta.
ksmarini, o seu problema é o OU (||), o modo como está sendo verificado.

Se tu digitar o 's' ele vai cair no OU do diferente de 'n', se tu digitar 'n', ele cai no OU do diferente de 's'.
Entende? Tu não consegue fugir dessa forma, então, altere assim:

public void verificaOpcao(){  
            if(opcao != 's' && opcao != 'n'){   
                System.out.println("Resposta invalida\n");  
                System.out.println("Responda s pra sim ou n para nao!\n");  
  
            }  
        }

Assim, tu está falando algo como: "se a minha 'opcao' for diferente de 's' e diferente de 'n', é qualquer outro valor". Isso funciona, pois, para entrar nessa condição as duas condições impostas pelo AND (&&) tem de ser verdadeira, entende ? Espero ter ajudado.

Abraços.

A

Boa tarde, não sei se entendi a dúvida …

Então, você está tentando criar o método dentro do método main. Isso não pode.

Coloque seu método verificaOpcao() para fora do bloco do método main.

Lembrando que o método main é static, logo, se você for utilizar o método verificaOpcao() dentro do main, esse também deverá ser static.

[]'s

ksmarini

alex.brito:
Boa tarde, não sei se entendi a dúvida …

Então, você está tentando criar o método dentro do método main. Isso não pode.

Coloque seu método verificaOpcao() para fora do bloco do método main.

Lembrando que o método main é static, logo, se você for utilizar o método verificaOpcao() dentro do main, esse também deverá ser static.

[]'s


Não fazia a menor ideia que não podia fazer isso. rs

Mas e a variavel opcao? ela vai ser global? é isso?

A

ksmarini:
alex.brito:
Boa tarde, não sei se entendi a dúvida …

Então, você está tentando criar o método dentro do método main. Isso não pode.

Coloque seu método verificaOpcao() para fora do bloco do método main.

Lembrando que o método main é static, logo, se você for utilizar o método verificaOpcao() dentro do main, esse também deverá ser static.

[]'s


Não fazia a menor ideia que não podia fazer isso. rs

Mas e a variavel opcao? ela vai ser global? é isso?

Não precisa, você pode fazer seu método verificaOpcao receber e opcao digitada.

Ex:

public static void verificaOpcao(char opcao){
   // seu codigo
}
MaYaRa_SaN

é so um detalhe de lógica… teu if quer verificar se o usuário digitou qualquer coisa diferente de S ou N, certo? então voce precisa usar um && no lugar de || como disse o nel

ficaria assim:

// médoto que verifica 
    public boolean verificaOpcao(char opt){  
                if(opt != 's' && opt != 'n'){   
                    System.out.println("Resposta invalida\n");  
                    System.out.println("Responda s pra sim ou n para nao!\n");  
                    return false;  
                }else{  
                    return true;  
                }  
            }  

// --  MAIN --
            System.out.println("O animal escolhido e mamifero? ");  
            opcao = leitura.next().charAt(0);  

            if(verificaOpcao(opcao) == true && opcao == 's'){  
                System.out.println("mamifero");  
            }

pensando melhor, não haveria necessidade de verificar a opção antes, já que vc só irá mostrar a msg se for igual a S.

nel
ksmarini:
alex.brito:
Boa tarde, não sei se entendi a dúvida ....

Então, você está tentando criar o método dentro do método main. Isso não pode.

Coloque seu método verificaOpcao() para fora do bloco do método main.

Lembrando que o método main é static, logo, se você for utilizar o método verificaOpcao() dentro do main, esse também deverá ser static.

[]'s


Não fazia a menor ideia que não podia fazer isso. rs

Mas e a variavel opcao? ela vai ser global? é isso?

Está lhe faltando bastante conhecimento sobre o básico (bem básico) do Java.
E ele é Orientado a Objetos, como deve saber, portanto, deve evitar variáveis globais.

Segue exemplo:

public class Test {
	
	public static void main(String[] args) {
		boolean resultado = Test.valida('j');
		System.out.println(resultado);
	}
	
	public static boolean valida(char op) {
		return op == 's' || op == 'n';
	}
}

Nesse caso, o método 'valida' pertence a classe e não a uma instancia, por ser estático.
Bem, recomendo a leitura da apostila da Caelum sobre OO, vai lhe ser bem útil.

Abraços.

ksmarini

alex.brito:
ksmarini:
alex.brito:
Boa tarde, não sei se entendi a dúvida …

Então, você está tentando criar o método dentro do método main. Isso não pode.

Coloque seu método verificaOpcao() para fora do bloco do método main.

Lembrando que o método main é static, logo, se você for utilizar o método verificaOpcao() dentro do main, esse também deverá ser static.

[]'s


Não fazia a menor ideia que não podia fazer isso. rs

Mas e a variavel opcao? ela vai ser global? é isso?

Não precisa, você pode fazer seu método verificaOpcao receber e opcao digitada.

Ex:

public static void verificaOpcao(char opcao){ // seu codigo }

Se eu entendi direito é pra fazer assim:

import java.util.Scanner;

public static void verificaOpcao(char opt){
	if(opt != 's' && opt != 'n'){ 
		System.out.println("Resposta invalida\n");
		System.out.println("Responda s pra sim ou n para nao!\n");
	}
}

public class Animais{
	public static void main(String args[]){
		char opcao = ' ';
		Scanner leitura = new Scanner(System.in);
		
		System.out.println(" \nEscolha um dentre os possiveis animais: \n "+
		" \nleao, cavalo, homem, macaco, morcego, baleia, avestruz, pinguim," +
		"pato, aguia, tartaruga, crocodilo e cobra\n");
		
		System.out.println("O animal escolhido e mamifero? ");
		opcao = leitura.next().charAt(0);
		verificaOpcao(opcao);
		if(opcao == 's'){
			System.out.println("mamifero");
		}

		System.out.println("O animal escolhido e uma ave? ");
		opcao = leitura.next().charAt(0);
		if(opcao == 's'){
			System.out.println("ave");
		}

		System.out.println("O animal escolhido e reptil? ");
		opcao = leitura.next().charAt(0);
		if(opcao == 's'){
			System.out.println("reptil");
		}else{
			System.out.println("O animal escolhido nao esta na lista!");
		}
	}
}
Mas o compilador retorna esse erro:

C:\java>javac Animais.java

Animais.java:3: error: class, interface, or enum expected

public static void verificaOpcao(char opt){

^

Animais.java:6: error: class, interface, or enum expected

System.out.println(Responda s pra sim ou n para nao!\n);

^

Animais.java:7: error: class, interface, or enum expected

}

^

3 errors

C:\java>

MaYaRa_SaN

ksmarini, voce está estudando por algum livro? se quiser postar a questão, podemos te ajudar melhor…

ksmarini
nel:
diego.sas:
Para fazer verificação de String, utiliza-se .equals..

Ele está usando char, portanto, a verificação está correta.
ksmarini, o seu problema é o OU (||), o modo como está sendo verificado.

Se tu digitar o 's' ele vai cair no OU do diferente de 'n', se tu digitar 'n', ele cai no OU do diferente de 's'.
Entende? Tu não consegue fugir dessa forma, então, altere assim:

public void verificaOpcao(){  
            if(opcao != 's' && opcao != 'n'){   
                System.out.println("Resposta invalida\n");  
                System.out.println("Responda s pra sim ou n para nao!\n");  
  
            }  
        }

Assim, tu está falando algo como: "se a minha 'opcao' for diferente de 's' e diferente de 'n', é qualquer outro valor". Isso funciona, pois, para entrar nessa condição as duas condições impostas pelo AND (&&) tem de ser verdadeira, entende ? Espero ter ajudado.

Abraços.


Nel, Valew corrigir o OU e AND, mas ainda não consegui nem compilar meu código depois que coloquei o método. :(
Entender esses tais de métodos tá pior que pensei. rs

ksmarini

na verdade MaYaRa_SaN, estou estudando por um monte de livros, Esse exercício dos animais é de um livro sobre lógica de programação, mas o método tem haver com outra apostila da caelum. Estou praticando os dois pra ver se tinha entendido o conceito dos métodos, mais ainda estou meio perdido. :oops:
Uma hora eu chego lá. rs

diego.sas

Acho que não precisaria fazer todas estas verificações,
switch/case resolveria este exercício

A

Não Não …

O método deve ficar dentro da classe Animais e fora do método main …

Ex.

import java.util.Scanner;  
      
        
    public class Animais{  

       public static void verificaOpcao(char opt){  
          if(opt != 's' && opt != 'n'){   
             System.out.println("Resposta invalida\n");  
             System.out.println("Responda s pra sim ou n para nao!\n");  
          }  
        }  

        public static void main(String args[]){  
            char opcao = ' ';  
            Scanner leitura = new Scanner(System.in);  
              
            System.out.println(" \nEscolha um dentre os possiveis animais: \n "+  
            " \nleao, cavalo, homem, macaco, morcego, baleia, avestruz, pinguim," +  
            "pato, aguia, tartaruga, crocodilo e cobra\n");  
              
            System.out.println("O animal escolhido e mamifero? ");  
            opcao = leitura.next().charAt(0);  
            verificaOpcao(opcao);  
            if(opcao == 's'){  
                System.out.println("mamifero");  
            }  
      
            System.out.println("O animal escolhido e uma ave? ");  
            opcao = leitura.next().charAt(0);  
            if(opcao == 's'){  
                System.out.println("ave");  
            }  
      
            System.out.println("O animal escolhido e reptil? ");  
            opcao = leitura.next().charAt(0);  
            if(opcao == 's'){  
                System.out.println("reptil");  
            }else{  
                System.out.println("O animal escolhido nao esta na lista!");  
            }  
        }  
    }

PS. ksmarini como você disse no começo do tópico, isso é um exercicio / estudo de lógica, certo ? Então, você já está estudando lógica Orientada a Objetos ou lógica Estruturada ??
Enfim, gostaria de deixar só a dica para você também estudar sobre a Programação Orientada a Objetos (POO). Por que isso irá lhe ajudar muito a superar esses primeiros desafios.
Se você continuar a desenvolver em java isso será muito importante.
Dá uma pesquisada aqui no fórum mesmo, tem a apostila da caelum e da k19 sobre POO que são excelentes.

@ficaadica

Boa sorte.

[]'s

nel

Por isso eu disse para ler a apostila da Caelum, em particular, a FJ-11.
Você precisa entender o que é um objeto, depois uma classe para ai sim compreender a utilização de métodos.

Há um detalhe importante, você isolou uma verificação em um método, se fizer o retorno void ao invés de boolean, como vai saber se o usuário digitou um carácter válido ou não ? Você precisa que o método lhe dê algum retorno para que você faça a verificação necessária, se ela for inválida, você pode simplesmente dar um ‘return;’, tendo em vista que o método é void. Isso vai interromper a execução do mesmo.

O seus erros de compilação é porque faltou fechar corretamente alguma chave, dá uma olhada com atenção.
Abraços.

ksmarini

diego.sas:
Acho que não precisaria fazer todas estas verificações,
switch/case resolveria este exercício

Concordo, mas eu iria sem continuar a entender como funciona o método que estou estudando. Ficaria sem saber pq não compila, pq tenho que enviar parâmetros (se é que tenho que enviar. rs) e preciso superar os obstáculos. :wink:

MaYaRa_SaN

entendi… OO não é dos conceitos mais simples de entender mesmo…

os métodos devem ser declarados dentro de classes, e as classes voce pode criar objetos para usar tudo que tem dentro dela.
o JAVA nao permite que voce crie metodos dentro de outros métodos.

o método main é o metodo responsável pelo inicio do teu sistema, é por ele que a JVM vai começar a executar.

eu nao gosto muito da abordagem de alguns livros/apostilas que criam subclasse, então minha sugestão é voce ter 2 classes, uma chamada principal que terá o metodo main e voce fará a “conversa” com o usuário, e outra que verifica se é mamífero.

import java.util.Scanner;


public class Principal {

	public static void main(String args[]){  
        String animal = "";  
        Scanner leitura = new Scanner(System.in);  
        VerificaAnimal verif = new VerificaAnimal(); //aqui voce cria um obj da outra classe para usar os métodos dentro dela.
          
        System.out.println(" \nEscolha um dentre os possiveis animais: \n "+  
        " \nleao, cavalo, homem, macaco, morcego, baleia, avestruz, pinguim," +  
        "pato, aguia, tartaruga, crocodilo e cobra\n");  
          
        System.out.println("Informe o nome do animal ");  
        animal = leitura.next();  
        
        String msg = verif.verificaAnimal(animal);  
        
        System.out.println(msg);
        
    }  
	
}
public class VerificaAnimal {

	public String verificaAnimal(String animal) {
		String msg = "";
	
		if (animal.equals("leao") || animal.equals("cavalo")
				|| animal.equals("macaco") || animal.equals("morcego")
				|| animal.equals("baleia")) {
			msg = "O animal escolhido é um mamifero!";
			
		} else if (animal.equals("avestruz") || animal.equals("pinguim")
				|| animal.equals("pato") || animal.equals("aguia")) {
			msg = "O animal escolhido é uma ave!";
			
		} else if (animal.equals("tartaruga") || animal.equals("crocodilo")
				|| animal.equals("cobra")) {
			msg = "O animal escolhido é um reptil!";
			
		} else {
			msg = "O animal escolhido nao esta na lista!";
			
		}

		return msg;
	}

}

PS: escrevi rapidinho e nao teste… se der erro avisa!

ksmarini

Pessoal, muito obrigado. Vou tentar desenvolver com as dicas apresentadas e procurar mais material na net. acho que até amanhã eu posto as novidades. Muito obrigado mesmo.

ksmarini

Bom pessoal, grato pela ajuda. Consegui resolver com um pouco de gambiarra. :smiley:
A parte de como o método funciona ficou de boa. Está tudo funcionando de boa. Mas acho que na parte do exercício de estruturas aninhadas eu fiquei devendo um pouco, portanto vou deixar o tópico como não resolvido por mais uns dois ou três dias pra que possa receber sugestões. Segue o resultado que consegui chegar.

import java.util.Scanner;


public class Animais{

public static char verificaOpcao(char opt){
	char verificador = opt;
	Scanner novaLeitura = new Scanner(System.in);
	
	while(verificador != 's' && verificador != 'n'){
		System.out.println("\nOpcao Invalida!\n Entre com s ou n: ");
		verificador = novaLeitura.next().charAt(0);
	}
	return verificador;
}

	public static void main(String args[]){
		char opcao = ' ';
		Scanner leitura = new Scanner(System.in);
		
		System.out.println(" \nEscolha um dentre os possiveis animais: \n "+
		" \nleao, cavalo, homem, macaco, morcego, baleia, avestruz, pinguim," +
		" pato, aguia, tartaruga, crocodilo e cobra\n");
		
		System.out.print("O animal escolhido eh mamifero? ");
		opcao = leitura.next().charAt(0);
		opcao = verificaOpcao(opcao);
		if(opcao == 's'){
			
			System.out.print("O animal escolhido eh quadrupede? ");
			opcao = leitura.next().charAt(0);
			opcao = verificaOpcao(opcao);
			if(opcao == 's'){
				System.out.print("O animal escolhido eh carnivoro? ");
				opcao = leitura.next().charAt(0);
				opcao = verificaOpcao(opcao);
				
				if(opcao == 's'){
					System.out.print("O animal escolhido foi o leao!");
					System.exit(0);
				}else{
					System.out.print("O animal escolhido foi o cavalo!");
					System.exit(0);
				}
			}

			System.out.print("O animal escolhido eh bipede? ");
			opcao = leitura.next().charAt(0);
			opcao = verificaOpcao(opcao);
			if(opcao == 's'){
				System.out.print("Esse animal eh onivoro? ");
				opcao = leitura.next().charAt(0);
				opcao = verificaOpcao(opcao);
				
				if(opcao == 's'){
					System.out.print("O animal escolhido foi o homem!");
					System.exit(0);
				}else{
					System.out.print("O animal escolhido foi o macaco!");
					System.exit(0);
				}
			}

			System.out.print("O animal escolhido voa? ");
			opcao = leitura.next().charAt(0);
			opcao = verificaOpcao(opcao);
			if(opcao == 's'){
				System.out.print("O animal escolhido foi o morcego!");
				System.exit(0);
			}else{
				System.out.print("O animal escolhido foi a baleia!");
				System.exit(0);
			}
		}
		
		System.out.print("O animal escolhido eh uma ave? ");
		opcao = leitura.next().charAt(0);
		opcao = verificaOpcao(opcao);
		if(opcao == 's'){

			System.out.print("Essa ave eh incapaz de voar? ");
			opcao = leitura.next().charAt(0);
			opcao = verificaOpcao(opcao);

			if(opcao == 's'){
				System.out.print("Eh uma ave tropical? ");
				opcao = leitura.next().charAt(0);
				opcao = verificaOpcao(opcao);
				if(opcao == 's'){
					System.out.print("O animal escolhido foi o avestruz!");
					System.exit(0);
				}else{
					System.out.print("O animal escolhido foi o pinguim!");
					System.exit(0);
				}
			}
			
			System.out.print("Essa ave eh sabe nadar? ");
			opcao = leitura.next().charAt(0);
			opcao = verificaOpcao(opcao);

			if(opcao == 's'){
				System.out.print("O animal escolhido foi o pato!");
				System.exit(0);
			}else{
				System.out.print("O animal escolhido foi a aguia!");
				System.exit(0);
			}
		}
		
		System.out.print("O animal escolhido eh um reptil? ");
		opcao = leitura.next().charAt(0);
		opcao = verificaOpcao(opcao);
		
		if(opcao == 's'){
			System.out.print("Essa animal tem casco? ");
			opcao = leitura.next().charAt(0);
			opcao = verificaOpcao(opcao);
		
			if(opcao == 's'){
				System.out.print("O animal escolhido foi a tartaruga ");
				System.exit(0);
			}
			
			System.out.print("Essa animal eh carnivoro e tem patas? ");
			opcao = leitura.next().charAt(0);
			opcao = verificaOpcao(opcao);
		
			if(opcao == 's'){
				System.out.print("O animal escolhido foi o crocodilo");
				System.exit(0);
			}else{
				System.out.print("O animal escolhido foi a cobra");
				System.exit(0);
			}
		}
	}
}

Muito obrigado a todos que me ajudaram.

Criado 27 de dezembro de 2011
Ultima resposta 27 de dez. de 2011
Respostas 20
Participantes 5