Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mapb_1990

Testar se o utilizador inserir dados no formato correcto

Recommended Posts

boas.

é o seguinte: tenho um metodo para a leitura de coordenadas de um ponto.

queria k o utilizador inseri-se as coordenadas com o formato (x;y;z)

o problema é: como é k testo se o user inseriu nesse formato?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode / deve criar um javadoc para seu método explicando como ele deve ser utilizado e os valores que devem ser informados para os parâmetros.

 

Se tiver alguma regra para os valores de x, y e z; você pode criar estruturas if dentro do seu método.

 

/**
  * Método bla bla bla bla bla
  * bla bla bla bla.
  * @param x - bla bla bla
  * @param y - bla bla bla
  * @param z - bla bla bla
  */
public void concatena(int x, int y, int z) {
	if(x >= 0 && y >= 0 && z >= 0)
	... 
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

o codigo que já tenho feito é:

/**
	 * Método que pede ao utilizador um ponto no espaço, no formato 
	 * (a;b;c), e coloca num vector as suas coordenadas.
	 * A posição 0, corresponte à coordenada do eixo das abcissas,
	 * a posição 1 à coordenada do eixo das ordenadas e a posição
	 * 2 à coordenada do eixo das cotas.<br />
	 * 
	 * Autores: Miguel Borges, Ruben Veloso, Elisete Cruz <br />
	 * Data de criação: 09-12-2008 <br />
	 * Data da última actualização: 10-12-2008 <br />
	 * 
	 * @param nomePto Nome do ponto a ler
	 * @return Vector com as coordenadas do ponto
	 * 
	 */
	public static double[] lerCoordenadasEspaco(String nomePto) {
		String coordenada;
		String[] temp;
		double[] vecA = new double[3];
		Scanner in = new Scanner(System.in);
		System.out.println("Introduza as coordenadas do " + nomePto + ": Formato (a;b;c)");
		coordenada = in.nextLine();
		if(		 ) //testa se o user inseriu no formato (x;y;z)
		temp = coordenada.split(";");
		vecA[0] = Double.parseDouble(temp[0]);
		vecA[1] = Double.parseDouble(temp[1]);
		vecA[2] = Double.parseDouble(temp[2]);
		return vecA;
	}

neste momento o meu metodo nao valida o k o user inseriu, e keria que le-se até k o user inseri-se as coordenadas do ponto na forma (x;y;z)

Compartilhar este post


Link para o post
Compartilhar em outros sites

import java.util.regex.*;
	   import java.util.Scanner;

	public static void main(String[] args) {
		lerCoordenadasEspaco("Juse");
	}
	
		public static boolean checaCoords(String coords){
			Pattern regex = Pattern.compile("^[0-9]+\;[0-9]+\;[0-9]+$");
			Matcher pesquisa = regex.matcher(coords);
			if(pesquisa.find()){
				return true;
			}
			return false;
		}
		
		public static String getCoords(String nomePto){
			System.out.println("Introduza as coordenadas do " + nomePto + ": Formato (a;b;c)");
			String coordenadas;
			Scanner in = new Scanner(System.in);
			coordenadas = in.nextLine();
			return coordenadas;
		}

		public static double[] lerCoordenadasEspaco(String nomePto) {
			String temp[], coordenadas;
			double[] vecA = new double[3];
			coordenadas = getCoords(nomePto);
			if(checaCoords(coordenadas)){
				temp = coordenadas.split(";");
				try {
					vecA[0] = Double.parseDouble(temp[0]);
					vecA[1] = Double.parseDouble(temp[1]);
					vecA[2] = Double.parseDouble(temp[2]);
				} catch(NumberFormatException e){
					System.out.println("Ocorreu um erro em nosso sistema");
				}
			} else {
				System.out.println("Favor preencha do jeito pedido");
				lerCoordenadasEspaco(nomePto);
			}
			return vecA;
		}

Coloquei o main porque fiz um teste aqui...ai você também faz ai...

A regex fico bem tosca...não repara!

 

Edit:tinha esquecido de colocar os imports...o.o

Compartilhar este post


Link para o post
Compartilhar em outros sites

import java.util.regex.*;
	   import java.util.Scanner;

	public static void main(String[] args) {
		lerCoordenadasEspaco("Juse");
	}
	
		public static boolean checaCoords(String coords){
			Pattern regex = Pattern.compile("^[0-9]+\;[0-9]+\;[0-9]+$");
			Matcher pesquisa = regex.matcher(coords);
			if(pesquisa.find()){
				return true;
			}
			return false;
		}
		
		public static String getCoords(String nomePto){
			System.out.println("Introduza as coordenadas do " + nomePto + ": Formato (a;b;c)");
			String coordenadas;
			Scanner in = new Scanner(System.in);
			coordenadas = in.nextLine();
			return coordenadas;
		}

		public static double[] lerCoordenadasEspaco(String nomePto) {
			String temp[], coordenadas;
			double[] vecA = new double[3];
			coordenadas = getCoords(nomePto);
			if(checaCoords(coordenadas)){
				temp = coordenadas.split(";");
				try {
					vecA[0] = Double.parseDouble(temp[0]);
					vecA[1] = Double.parseDouble(temp[1]);
					vecA[2] = Double.parseDouble(temp[2]);
				} catch(NumberFormatException e){
					System.out.println("Ocorreu um erro em nosso sistema");
				}
			} else {
				System.out.println("Favor preencha do jeito pedido");
				lerCoordenadasEspaco(nomePto);
			}
			return vecA;
		}

Coloquei o main porque fiz um teste aqui...ai você também faz ai...

A regex fico bem tosca...não repara!

 

Edit:tinha esquecido de colocar os imports...o.o

mt obrigado, proust.

esse codigo tem um pequeno problema. tipo, o programa está limitado a vectores inteiros de um algarismo. e convinha aceitar td o tipo de numeros

Exemplos:

4

67890

9,6

etc..

Compartilhar este post


Link para o post
Compartilhar em outros sites

o caracter decimal é representado por "ponto" .

basta adicioná-lo dentro do bloco correspondente na regra regex

para adicionar, separe por vírgula

Compartilhar este post


Link para o post
Compartilhar em outros sites

o caracter decimal é representado por "ponto" .

basta adicioná-lo dentro do bloco correspondente na regra regex

para adicionar, separe por vírgula

Correto...mas ai a regex ia forçar muito...o cara não ia poder digitar 1,teria que digitar 1.0 por exemplo.

Seguinte,troque:

return coordenadas;

Por:

return coordenadas.replace(",", ".");

Troque:

public static boolean checaCoords(String coords){
			Pattern regex = Pattern.compile("^[0-9]+\;[0-9]+\;[0-9]+$");
			Matcher pesquisa = regex.matcher(coords);
			if(pesquisa.find()){
				return true;
			}
			return false;
		}

Por:

public static boolean checaCoords(String coords){
			Pattern regex = Pattern.compile
			("^(\-)?[0-9]+(\.[0-9]+)?\;(\-)?[0-9]+(\.[0-9]+)?\;(\-)?[0-9]+(\.[0-9]+)?$");
			Matcher pesquisa = regex.matcher(coords);
			if(pesquisa.find()){
				return true;
			}
			return false;
		}

Deve te dar um pouco de liberdade...formatos aceitos:

c1.c2;
c1,c2;
c1;
-c1.c2;
-c1,c2;
-c1;

Ilustrando:

1.2;1,6;4
1,3;1.4;20
10;-2,3;1.4
1;1;1
1.2;1.3;1.4
1;2,3;-10.4

O engraçado é que quando testei no php...apanhei...agora que abri minha IDE e testei,funcionou perfeitamente...fo%% viu...

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

mt obrigado.

só + uma duvidazinha:

como faço para formatar um numero? por exemplo: numero de casas decimais, separador das casas decimais, etc...

no php fazia: number_format (1000.50, '2' , ',' , ' ') //imprime 1 000,50

e em java como se faz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.