Diferenciar uma String (resolvido)

15 respostas
J

é o seguinte, eu quero que enquanto uma funçao aritmética for digitada errada (exemplo: a pessoa digita “a, k, &” ao invés de digita “+, -, *, /”) ele retorne a pergunta!

A[i] = Integer.parseInt(JOptionPane.showInputDialog("Digite a primeira variavel")); arit[i] = JOptionPane.showInputDialog("Digite o operador aritmetico"); while(arit[i].equals(("+")) || arit[i].equals("-") || arit[i].equals("*") || arit[i].equals("/")) { JOptionPane.showMessageDialog(null, "Você não digitou um operador aritmetico corretamente (+, -, *, /)"); } B[i] = Integer.parseInt(JOptionPane.showInputDialog("Digite a segunda variavel"));

seria a mesma coisa com variáveis do tipo inteira que usamo a != b; mas com strings, como faria?

15 Respostas

JhowTroMundo
Character operador;		
do{
	operador = new Scanner(System.in).next().charAt(0);
} while(!operador.equals('+') 
	&& !operador.equals('-')
	&& !operador.equals('*')
	&& !operador.equals('/'));
nel

Oi!

Creio que há implementações mais “elegantes”. Como você sabe a String que deseja obter, podes criar algo do tipo:

public class Teste {
    private static Set<String> operators = null;
    // Popula o Set no Class Loader da classe
    static {
        operators = new Set<String>();
        operators.add("+");   
        operators.add("-");
        operators.add("*");
        operators.add("/");
    }

    public static void main(String args[]) {
        String operador;
        do{   
           operador = new Scanner(System.in).next();
        } while(!operator.contains(operador));
    }
}

É uma idéia, elimina algumas condições e deixa o código mais “limpo”, é o que eu acho.
Abraços.

RafaelCassau

Bom dia Jadir eu implementei um exemplo também da uma olhada e ve oq acha ok

package Duvidas;

import javax.swing.JOptionPane;

public class OperadorAritmetico {

	public static void main(String args[]){
		OperadorAritmetico obj = new OperadorAritmetico();
		obj.menu();
	}
	
	public void menu(){
		
		char operador;
		String result = "";
		
		do{
			operador = JOptionPane.showInputDialog("Informe um operador Matematico (* / + -)").charAt(0);
			
			switch(operador){
				case '*':
					result = "A operação matematica escolhida é: (*)";
					break;
				case '/':
					result = "A operação matematica escolhida é: (/)";
					break;
				case '+':
					result = "A operação matematica escolhida é: (+)";
					break;
				case '-':
					result = "A operação matematica escolhida é: (-)";
					break;
				default:
					result = "Por favor informe uma operação matematica!";
			}
			JOptionPane.showMessageDialog(null,result);
			
		}while(!(operador == '*' || operador == '/' || operador == '+' || operador == '-'));
	}
}

como nosso amigo disse existem outras opções mais elegantes de se resolver este problema, mais acho essa que postei bem simples, abraços…

thiago.correa
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JOptionPane;

public class Teste {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Matcher matcher = null;
		String texto = null;
		do {

			texto = JOptionPane.showInputDialog(null, "Opa");
			Pattern p = Pattern.compile("[+|-|*|/]");
			matcher = p.matcher(texto);
		} while (!matcher.matches());

	}

}

Banco santander agência 6666 conta 696969-8
:smiley:

nel

Então que tal modificar esse seu while?

Porque simplesmente não cria uma variavél boolean para controle, pois está fazendo a mesma comparação duas vezes, só uma com switch e a outra sem.
Não vejo nada de complicado na minha solução, ao contrário, é bem simples.

Mas vou modificar o que fez, para exemplificar o que quero dizer:

package Duvidas;   
  
import javax.swing.JOptionPane;   
  
public class OperadorAritmetico {   
  
    public static void main(String args[]){   
        OperadorAritmetico obj = new OperadorAritmetico();   
        obj.menu();   
    }   
       
    public void menu(){   
           
        char operador;   
        String result = "";   
        boolean ok = true;
        do{   
            operador = JOptionPane.showInputDialog("Informe um operador Matematico (* / + -)").charAt(0);   
               
            switch(operador){   
                case '*':   
                    result = "A operação matematica escolhida é: (*)";   
                    ok = true;
                    break;   
                case '/':   
                    result = "A operação matematica escolhida é: (/)";   
                    ok = true;
                    break;   
                case '+':   
                    result = "A operação matematica escolhida é: (+)";   
                    ok = true;
                    break;   
                case '-':   
                    result = "A operação matematica escolhida é: (-)"; 
                    ok = true;
                    break;   
                default:   
                    ok = false;
                    result = "Por favor informe uma operação matematica!";   
            }   
            JOptionPane.showMessageDialog(null,result);   
               
        } while(!ok);   
    }   
}

Por padrão, se supõe que o usuário digitou algo correto, portanto, ele só vai permanecer dentro do loop caso o usuário entre com um valor inválido, para tal, no default do switch, você simplesmente atribui um false a variavél booleana. Ela recebe true dentro dos cases corretos, pois o usuário pode digitar errado na primeira vez mas correto da segunda, nesse caso, poderia entrar em loop infinito se não fosse atribuido o true.

Abraços.

nel
thiago.correa:
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JOptionPane;

public class Teste {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Matcher matcher = null;
		String texto = null;
		do {

			texto = JOptionPane.showInputDialog(null, "Opa");
			Pattern p = Pattern.compile("[+|-|*|/]");
			matcher = p.matcher(texto);
		} while (!matcher.matches());

	}

}
Banco santander agência 6666 conta 696969-8 :D

Haha! Eu ia falar em Regex, mas se falaram que um Set era complicado, preferi ficar calado.
Mas passar o número da conta foi ótimo! haha

RafaelCassau

Boa tarde nel vlw pela dica nem tinha percebido, mais ainda bem q vc me esclareceu, é bom pois agora vou aplicar mais essa boa pratica, em relação a sua primeira solução ela realmente é simples, naum quiz dizer q é complicada, acho q me interpretei mal, mais e que talves partindo de um usuario que naum conhece Arraylist fika meio complicado entender, por isso que postei a minha solução, mais vlw por tudo brigadão, abraços…

nel

Que isso, talvez eu tenha entendido mal o que disse também :smiley:
Isso, as vezes são pequenos detalhes que deixamos passar e talvez, mais para a frente, possam a vir nos causar dor de cabeça!

Abraços amigo!

J

é que eu sou bem iniciante e mesmo assim ainda fiquei um pouco perdido com a explicação de vocês,
exemplo se eu quero fazer um contador rodas ate que tenha um finalizador como X como faria pra parar esse contator

exemplo queria algo mais ou menos assim!
import javax.swing.JOptionPane;
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        int qtd_criancas_nascidas, qtd_dias_incubadora;
        String sexo;
        
        sexo = "";
        
        while(sexo.equals("X")) //se fosse um inteiro seria (exemplo: while(idade != -1))
        {
            sexo = JOptionPane.showInputDialog("Digite o sexo M ou F: "); //se fosse um inteiro seria (exemplo: if(idade != -1))
            if(sexo.equals("X"))
                  {
                   ....
                   }
        }
    }

é mais ou menos que eu quero, se alguém tive disposição de me ensinar de outra maneira também, mas o que eu quero é entender

nel

Oi!

Recomendo que leia a apostila da Caelum FJ-11.
Ela dá uma boa noção sobre Orientação a Objetos com o Java, seria interessa uma leitura.

Para a sua pergunta, você deve usar um laço de repetição, como for, do-while, while e impor uma condição de parada.
No seu exemplo, enquanto o usuário digitar a letra M, ele vai continuar em loop, isso você compreende? :slight_smile:

Abraços.

J

sim sim, é que no momento ainda não estou me dedicando a OO, e sim to estudando lógica de programação!
eu só quero que o critério de parada do looping quando o usuário digita X acaba o looping! entendeu?

nel

Jadir:
sim sim, é que no momento ainda não estou me dedicando a OO, e sim to estudando lógica de programação!
eu só quero que o critério de parada do looping quando o usuário digita X acaba o looping! entendeu?

Entendi!!!
Se queres que a parada seja quando digita X podes alterar o seu while para:

while(!sexo.equals("X")) {//seu código}

Ou permanece como está e faz um break:

if(sexo.equals("X") break;

Não vejo lógica para a segunda opção, pois, não faria muito sentindo colocar algo como:

while(sexo.equals("X").....if(sexo.equals("X")) break;

Concorda? :slight_smile:
Abraços.

J

eu coloco o if porque tem mais perguntas em baixo! dai se for diferente de X ele cai nas outras pergunta, se for X ele ja cai novamente no looping encerrando, sem cair nas perguntas entendeu?

nel

Jadir, quem deve entender é você e não eu, você omitiu código, sendo assim, não tem como eu adivinhar o que você quer :slight_smile:
Se você entendeu o Loop, dê como resolvido seu tópico, caso contrário, abra um novo amigo para tratar só de laço de repetição.

Abraços.

J

nel, vou colocar como resolve, e você resolveu meu problema, muito obrigado

vou deixa o código pra você da uma olhada!

Realizou- se uma pesquisa para determinar alguns dados estatisticos em relação ao conjunto de crianças nascidas em um certo periodo de uma determinada maternidade. Construa algortimo que leia n° de crianças nascidas desse período, depois, em um número indeterminado de vezes. O sexo de um recém nascido prematuro(M ou F) e o numero de dias que foi mantido na encubadora.
Como finalizador, teremos a letra X no lugar do sexo da criança.
Determine e imprima

a) Porcentagem de recém- nascidos prematuro
b) A porcentagem de recém- nascidos meninas e meninos do total de prematuro
c) A média de dias de permanência dos recém-nascidos prematuros na encubadora.
d) O maior número de dias do recem-nascido prematuro permaneceu na encubadora.

import javax.swing.JOptionPane;
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        int qtd_criancas_nascidas, qtd_dias_incubadora, cont_prematuros, cont_meninos, cont_meninas, qtd_dias;
        String sexo;
        double porc_prematuros, porc_meninos, porc_meninas, media_dias, maior_dias;

        sexo = "";
        cont_prematuros = 0;
        cont_meninos = 0;
        cont_meninas = 0;
        qtd_dias = 0;
        maior_dias = 0;

        qtd_criancas_nascidas  = Integer.parseInt(JOptionPane.showInputDialog("Digite quantas crianças nasceu: "));
        while(!sexo.equals("X"))
        {
            sexo = JOptionPane.showInputDialog("Digite o sexo :\n(M) - masculino\n(F) - feminino ");
            if(!sexo.equals("X"))
            {
                qtd_dias_incubadora = Integer.parseInt(JOptionPane.showInputDialog("Digite quantos dias ele(a) ficou na incubadora: "));
                
                if(qtd_dias_incubadora > maior_dias)
                {
                    maior_dias = qtd_dias_incubadora;
                }
                if(sexo.equals("M"))
                {
                    cont_meninos = cont_meninos + 1;
                }
                else
                {
                    cont_meninas = cont_meninas + 1;
                }
                cont_prematuros = cont_prematuros + 1;
                qtd_dias = qtd_dias + qtd_dias_incubadora;
            }
        }

        porc_prematuros = (cont_prematuros * 100)/qtd_criancas_nascidas;
        porc_meninos = (cont_meninos * 100)/cont_prematuros;
        porc_meninas = (cont_meninas * 100)/cont_prematuros;
        media_dias = qtd_dias/cont_prematuros;
        JOptionPane.showMessageDialog(null, "A porcentagem de recém-nascidos prematuro: "+porc_prematuros+"% \n"+
                                            "A porcentagem de recém nascidos meninos é "+porc_meninos+"% e de meninas é "+porc_meninas+"% do total de prematuros \n"+
                                            "A média de dias de permanência dos recém-nascidos prematuros na incubadira "+media_dias+"\n"+
                                            "O maior número de dias que o um recém-nascido prematuro permaneceu na incubadira "+maior_dias);
    }

}
Criado 16 de junho de 2011
Ultima resposta 21 de jun. de 2011
Respostas 15
Participantes 5