Problema com a logica

16 respostas
Rauel

Eai galera , estou com um problema na logia de um exercicio pois comecei a logia e acabei ficando sem logica :P

É O SEGUINTE TENHO QUE FAZER UMA APLICAÇÃO QUE O USUARIO DIGITE QUALQUER NÚMERO INTEIRO, E ESSA APLICAÇÃO EXIBA O MAIOR DIVISOR DO NUMERO INSERIDO E LOGO ABAIXO TODOS OS SEUS DIVISORES , MAIS TENHO QUE DIFERENCIAR DE NÚMERO PAR E ÍMPAR MAIS NÃO SENDO O PROPRIO NÚMERO(EX: 20 mairo divisor é ele msm, isso ñ pode, no caso seria o 10 que é o maior divisor de 20) [color=red]OU SEJA SE O USUÁRIO DIGITAR UM NÚMERO PAR VAI MOSTRAR O SEU MAIOR DIVISOR E LOGO ABAIXO OS SEUS DIVISORES E COM A SEGUINTE MENSAGEM "ESSE NÚMERO NÃO CONTÉM DIVISORES IMAPRES", O MESMO CASO SERVE PARA OS NÚMEROS IMPARES [/color], ENTÃO EU FIZ A ESTRUTUA AI EMBAIXO SÓ QUE ME PERDI NO MEIO NÃO SEI COMO INDENTIFICAR O MAIOR DIVISOR E NEN MOSTRAR-LO, CONSIGO ATÉ ENTÃO COM ESSA ESTRUTURA OS DIVISORES DO NÚMERO ISSO JÁ É UM MEIO CAMINHO ANDADO EU ACHO NÉ.

VLW GALERA ESPERO TER AJUDAS :D

try{
											aux = JOptionPane.showInputDialog (null,"Digite um número:","Entrada de dados", JOptionPane.QUESTION_MESSAGE);
											num = Integer.parseInt(aux);
											aux = "";
											 for(int qtdCard = 1; qtdCard <= num ; qtdCard++){
											       if (num % qtdCard == 0 && qtdCard % 2 == 0 ){
											    	   aux += qtdCard + "\n" ; 			   
											    	   
											       }
											 }
											       if(num % 2 !=0){
											    	   for(int qtdCard = 1; qtdCard <= num ; qtdCard++){
													       if (qtdCard % 2 != 0 ){
											                aux += qtdCard + "\n" ; 			   
											              
													       }
											           }
											       }
										  }
										catch(NumberFormatException nfs){
											 JOptionPane.showMessageDialog(null,"forneça somente valores numericos");
										}
										 JOptionPane.showMessageDialog(null,"Quantidade de numeros divisores: "  + aux,"Divisores",JOptionPane.INFORMATION_MESSAGE);

16 Respostas

robsonsm

int maiorDivisor = 0; try { aux = JOptionPane.showInputDialog(null, "Digite um número:", "Entrada de dados", JOptionPane.QUESTION_MESSAGE); num = Integer.parseInt(aux); aux = ""; if (num % 2 == 0) { for (int qtdCard = 1; qtdCard <= num; qtdCard++) { if (num % qtdCard == 0 && qtdCard % 2 == 0) { aux += qtdCard + "\n"; maiorDivisor = (qtdCard != num) ? qtdCard : maiorDivisor; } } aux += "\nEste número não contém divisores impares."; } else { for (int qtdCard = 1; qtdCard <= num; qtdCard++) { if (num % qtdCard == 0 && qtdCard % 2 != 0) { aux += qtdCard + "\n"; maiorDivisor = (qtdCard != num) ? qtdCard : maiorDivisor; } } aux += "\nEste número não contém divisores pares."; } } catch (NumberFormatException nfs) { JOptionPane.showMessageDialog(null, "forneça somente valores numericos"); } JOptionPane.showMessageDialog(null, "Maior divisor: " + maiorDivisor + "\nQuantidade de numeros divisores: \n" + aux, "Divisores", JOptionPane.INFORMATION_MESSAGE); }

Veja se é isso + ou - o que vc queria.
Recomendo q faça um tratamento caso o usuário digitar o numero 0 ou 1, pois no caso do 0 não tem divisor nenhum e no caso do 1 o maior divisor é ele mesmo. Este codigo não ta tratando isso. :slight_smile:

rmendes08

Errado, 0 é divisível por qualquer número, ocorre que é impossível determinar seu maior divisor.

Na verdade essa lógica pode ser simplificada bastante:
:arrow: Um número somente tem divisores pares se ele mesmo for par, caso contrário todos os seus divisores serão ímpares
:arrow: Se o número é par, então o seu maior divisor que não é ele mesmo é a sua metade;
:arrow: Se o número N é ímpar, então você pode achar os seus divisores partindo de N / 2 - 1 até 1 de 2 em 2, testando o módulo

robsonsm

mesmo o 0 sendo divisível por qualquer numero, acho que ao ser digitado 0 não é necessário levar isso em consideração, pois senão vc terá que listar todos os números existentes (exceto o maior, já que não é possível saber) ou impor um limite.
Talvez apenas uma mensagem explicativa.

Rauel

vlw robsonsm e o rmendes08 pela as dicas conseguiram fazer com que eu voltasse a lógica da aplicação
vlw :smiley:

Rauel

pow agora tem uma aplicação que essa eu tbem estou perdido , O USUÁRIO VAI TER QUE DIGITAR O E-MAIL, E A APLICAÇÃO IRA VERIFICAR SE O E-MAIL ESTA TODO MINUSCULO CASO NÃO ESTEJA ELE SEJA TRANSFORMADO EM TODO MINUSCULO([color=red] EX: [email removido] ai no caso teria que passar todos os maisculos para minusculos para ficar assim [email removido] [/color]) E DEPOIS DISSO VERIFICAR E O EMAIL POSSUI APENAS UM @ E SE POSSUI APENAS UM PONTO(.)

[color=blue]POW QUERIA A AJUDA DE VCS PARA A LOGICA DE COMO RESOLVER ISSO [/color]

robsonsm

para transformar uma string em tudo minusculo:

nomeDaVariavel = nomeDaVariavel.toLowerCase();

para validar o email, vc pode utilizar expressão regular, por exemplo:

Pattern p = Pattern.compile("^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$"); Matcher m = p.matcher(email);

m.matches(); retorna um booleano (true) se o email corresponder a expressao.

Rauel

robsonsm, sou iniciante em java então não conheço esse metodo Pattern por isso não entendi a sua logica usada para o e-mail explica ai o codigo por favor , pois quando eu tinha comecado a fazer o codigo inicializei a variavel e fiz ela receber o e-mail do usuário e passei ela toda para minusculo usando o toLowerCase() ai verifiquei se o email possuia apenas 10 caracteres usando a condição if e chegou nessa pate ai que vc falou para aa verificação do @ e eu ñ entendi EXPLICA AI :smiley:

robsonsm

Seria bom vc ler sobre expressões regulares, pois é uma forma concisa e flexível de identificar palavras ou padrões de caracteres.
No exemplo que eu te passei, ele faz uma verificação se o e-mail é valido, não identificando apenas se tem “@”, mas se o mesmo segue o padrão da expressão passada, por exemplo, vc não pode ter um email dessa forma: nome@@empresa.com ou nome$%@.com, ou nome@empresa, etc.
Então, no exemplo ele faz essa verificação retornando um booleano caso o e-mail passado seja valido

Pattern p = Pattern.compile("^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$"); Matcher m = p.matcher(email); if(m.matches()) { // aqui seu e-mail foi validado corretamente } else { // aqui seu e-mail não foi validado corretamente }

ViniGodoy

Rauel, por favor, evite as letras maiúsculas. Fica muito ruim de ler seus tópicos.

B

Sou novo, espero estar postando certo, Ola Colegas alguem pode me ajudar num problema de logica?

B

Tenho um trabalho de sudoku em java para fazer, ja fiz grande parte, mas onde devo verificar as linhas e colunas não consigo de maneira nenhuma.

B

é preciso colocar meu codigo aqui para ter uma resposta?, agradeço ajuda!

ViniGodoy

Se você ainda não o fez, crie um tópico só para você, ao invés de postar no tópico dos outros. E, sim, colocar os trechos relevantes de código ajuda muito.

B

Achei que poderia postar aqui porque era mesmo problema, e assim não ficar repetido a pergunta no site

B

Obrigado!

Rauel

pow posta ai só pra ver qual é o seu problema

Criado 18 de setembro de 2010
Ultima resposta 20 de set. de 2010
Respostas 16
Participantes 5