Como fazer tratamentos para que o usuário entre somente com números?

8 respostas
java
R

Boa tarde pessoal, sou novato em programação, estou desenvolvendo um pequeno programa para realizar alguns calculos, cirei as variaveis e gostaria de saber como faço para que o usuario entre somente com numeros e caso ele entre com STRING emitir uma mensagem de erro falando que aceita somente numeros ?

Abaixo segue o código

package casos.especiais.terreno;

import java.util.Scanner;

import javax.swing.JOptionPane;

public class ApuracaoDoValor {

public static void main(String args[]) {

Scanner scan = new Scanner(System.in);

System.out.println("");

System.out.println("");

System.out.println("");

System.out.println("");

System.out.println("    ********************************************************************");

System.out.println("    <em>— TRABALHO ELABORADO POR:                                    —</em>");

System.out.println("    <em>—                         RODOLFO CAVALCANTE SILVA E SILVA   —</em>");

System.out.println("    <em>—                         JOSÉ MAURO DIAS NASCIMENTO         —</em>");

System.out.println("    ********************************************************************");

System.out.println("");

System.out.println("");

System.out.println("");

System.out.println("");

System.out.println("");
// Valor Venal do Terreno
	String Vtt;

	// Área do terreno
	double at;

	// Valor do metro quadrado por padrao de rua
	double vm;

	// Fator de influencia da situação do terreno
	double fst;

	// Fator de influencia de esquina ou numero de testada
	double fet;

	// Fator de influencia de caraciterística do terrreno
	double fct;

	// Fator geometrico
	double fge;

	// Fator gleba
	double fgl;

	// Fator de melhorias publicas
	double fmp;

	// Fator de depriciação em função da área de tombamento
	double fdat;

	double calc1;

	System.out.println("    --- Esta etapa irá ser calculada o VALOR VENAL DO TERRENO  ---    ");
	
	System.out.println("");
	
	System.out.println("---A fórmula é: ---");
	
	System.out.println("");
	
	System.out.println("************************************************************");
	System.out.println("* VVT = At x Vm x Fst x Fet x Fct x Fge x Fgl x Fmp x Fdat *");
	System.out.println("************************************************************");
	System.out.println("");
	System.out.println("");
	System.out.println("");
	
	System.out.println("   Insira o alor de At: ");
	at = scan.nextDouble();
	if(!at.matches("[0-9]*")) {
	JOptionPane.showMessageDialog(null, "   Voce nao pode digitar caracteres aqui, somente numeros! Digite novamente...");	
	return;
	}
	System.out.println("");
	System.out.println("");
	System.out.println("");
	
	System.out.println("   Insira o valor de Vm: ");
    vm = scan.nextDouble();
	System.out.println("");
	System.out.println("");
	System.out.println("");
	
	System.out.println("   Inira o valor de Fst: ");
	fst = scan.nextDouble();
	System.out.println("");
	System.out.println("");
	System.out.println("");
	
	System.out.println("   Insira o valor de Fet: ");
	System.out.print("");fet = scan.nextDouble();
	System.out.println("");
	System.out.println("");
	System.out.println("");
	
	System.out.println("   Insira o valor de Fct: ");
	System.out.print("");fct = scan.nextDouble();
	System.out.println("");
	System.out.println("");
	System.out.println("");
	
	System.out.println("   Insir o valor de Fge: ");
	fge = scan.nextDouble();
	System.out.println("");
	System.out.println("");
	System.out.println("");
	
	System.out.println("   Insira o valor de Fgl: ");
	fgl = scan.nextDouble();
	System.out.println("");
	System.out.println("");
	System.out.println("");
	
	System.out.println("   Insira o valor de Fmp: ");
	fmp = scan.nextDouble();
	System.out.println("");
	System.out.println("");
	System.out.println("");
	
	System.out.println("   Insira o valor de Fdap");
	fdat = scan.nextDouble();
	System.out.println("");

	System.out.println("");

	calc1 = at * vm * fst * fet * fct * fge * fgl * fmp * fdat;
	
	System.out.println("");
	System.out.println("");
	System.out.println("****************************************");
	System.out.printf("O valor venal do terreno é  %.2f%n", calc1);
	System.out.println("****************************************");
	System.out.println("");
	System.out.println("");
	System.out.println("");

//--------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------

// Valor Venal da Edificação
	String vve;

	// Área da Edificação
	double ae;

	/*
	 * Valor unitário M2 da construção obtido pela análise do tipo da edificação e o
	 * érfil de acabamento conforme registrado no cadastro imobiliário, com o
	 * enquadramento nas tabelas 8 e 12
	 */
	double vu;

	// Fator de localização
	double fl;
	// Fator Obsolescência
	double fo;
	// Fator de depreciação em função da área tombada
	double fdatt;

	double calc;

	double resultado;
	System.out.println("--- Esta fórmula ira calcular o VALOR VENAL DA EDIFICACAO: ---");
	System.out.println("");
	System.out.println("--- A fórmula é: ---");
	System.out.println("");
	System.out.println("");
	
	System.out.println("   *****************************");
	System.out.println("   * VVE = Ae x Vu x Fl x Fdat *");
	System.out.println("   *****************************");
	System.out.println("");
	System.out.println("");
	System.out.println("");
	
	System.out.println("   Insira o valor de Ae: ");
	System.out.print("");
	ae = scan.nextDouble();
	System.out.println("");
	System.out.println("");
	System.out.println("");
	
	System.out.println("   Insira o valor de Vu");
	System.out.print("");
	vu = scan.nextDouble();
	System.out.println("");
	System.out.println("");
	System.out.println("");
	
	System.out.println("   Insira o valor de Fl");
	System.out.print("");
	fl = scan.nextDouble();
	System.out.println("");
	System.out.println("");
	System.out.println("");
	
	System.out.println("   Insira o valor de Fo");
	System.out.print("");
	fo = scan.nextDouble();
	System.out.println("");
	System.out.println("");
	System.out.println("");
	
	System.out.println("   Insira o valor de Fdat");
	System.out.print("");
	fdatt = scan.nextDouble();
	System.out.println("");
	System.out.println("");

	calc = ae * vu * fl * fo * fdatt;

	resultado = calc1 + calc;

	// calc = calc *0.70;
	// calc = calc *1;

	System.out.println("");
	System.out.printf("O valor do calculo é  %.2f%n", resultado);
	System.out.println("");

	System.out.println("--- Pressione a tecla R para recomecar o programa ---");
	if (scan.next() == "R") {
		main(args);
		System.out.println("R pressionado");
	} else {
		System.out.println("");
		System.out.println("");
		System.out.println("--- Voce nao pressionou a letra R");
		System.exit(0);

	}

	System.out.println("Fim do programa");

}

}

8 Respostas

I

Você pode usar regex ou usar máscara nos campos.

Mike

Você pode utilizar o do while para pedir o numero, caso ele digite uma letra, automaticamente o scanner vai lançar uma exceção, quando lançar a exceção você seta a condição do while para true dentro do catch e ai vai executar novamente o do while

R

Olá, muito obrigado por me responder, más infelizmente não entendi !

Mike

Que parte você nao entendeu?
No meu post acima, falei sobre:

  • Laço de repetiçao do while
  • Exceção: bloco catch

Você conhece algum dos dois itens acima?

R

Olá Mike, eu ja vi, mas infelizmente ainda nao sei usalos !

Você quis dizer mais ou menos assim :slight_smile:

System.out.println("   Insira o alor de At: “);

do {

at = scan.nextDouble();

}while();

System.out.println(”");

System.out.println("");

System.out.println("");
Mike

Mais ou menos isso, mas na verdade seria assim:

do {
    try {
        //Seu código
    }
    catch(ExceçãoGeradaPorInformarUmaStringNoScannerInt e) {
        digitouLetras = true;
        System.out.println("Erro: Digite apenas números no menu");
    }
}
while(digitouLetras);

Da uma olhada nesse material sobre exceções:
https://www.caelum.com.br/apostila-java-orientacao-objetos/excecoes-e-controle-de-erros/#exerccio-para-comear-com-os-conceitos

Ou se preferir, ve algo no youtube relacionado.

R

Beleza consegui fazer, obrigado, mas gerou outra duvida toda vez que insiro um caracter ele exibe a mensagem de erro e trava, nao voltando para tentar novamente

//do {
		try {
			ae = scan.nextDouble();
		} catch(InputMismatchException excepition) {
		//digitouLetras = true;
		JOptionPane.showMessageDialog(null,"   Erro: Digite apenas números no menu " +excepition);
		return;
		}
	//while(digitouLetras == true);
	
	//};

como faço para ele voltar ao inicio para tentar novamente inserir um numero?

Mike

O do while faz isso.

Ele executa o trecho de código que esta dentro do bloco do pelo menos uma vez, caso a condição do while seja true, o código do bloco é executado novamente

Pelo que vi no seu código, você colocou o while no lugar errado, o while vem logo após o fechamento da chave do bloco do

do {

} while(condição);
Criado 19 de novembro de 2019
Ultima resposta 19 de nov. de 2019
Respostas 8
Participantes 3