mapb_1990 0 Denunciar post Postado Dezembro 10, 2008 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
Vergil 15 Denunciar post Postado Dezembro 10, 2008 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
mapb_1990 0 Denunciar post Postado Dezembro 10, 2008 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
eibon 2 Denunciar post Postado Dezembro 10, 2008 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
mapb_1990 0 Denunciar post Postado Dezembro 10, 2008 proust disse: 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
hinom 5 Denunciar post Postado Dezembro 11, 2008 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
eibon 2 Denunciar post Postado Dezembro 11, 2008 Citar 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
mapb_1990 0 Denunciar post Postado Dezembro 11, 2008 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
eibon 2 Denunciar post Postado Dezembro 11, 2008 Se for web tem o fmt do jstl,desktop eu pesquisei e achei uma classe para isso: http://java.sun.com/j2se/1.4.2/docs/api/ja...mberFormat.html Se não funcionar,avisa que eu faço um formatador para você. Abraço! Compartilhar este post Link para o post Compartilhar em outros sites