Programa que identifica se o número é divisivel por 2 ,3 e 2, 3 ao mesmo tempo
16 respostas
faviandrade
[quote]Por gentileza, gostaria de uma ajuda, pois estou tendo dificuldades em criar um programa que liste de 200 a 300 os números divisiveis por 2, 3 e por doi e 3 ao mesmo tempo.
Eu pensei em criar um for
tipo : for (int i = 100; i <= 200; i++)
e 03 IF (else) testando se o valor é divisivel por 2 e tb por 3 em primeiro lugar, pois eu eu colocar primeiro apenas por dois ou por três ele não irá para o próximo teste, em relação ao teste IF a dúvida é como criar testando o resto da divisão, pensei em algo assim:
publicstaticvoidmain(String[]args){for(inti=100;i<=200;i++){if(((i%3)==0&&((i%2))){System.out.println("O valor de "+i+" é Divisivel por 2 e 3 ");
Uma dica… os números divisíveis por 2 e 3 ao mesmo tempo são também os números divisíveis por 6.
faviandrade
mas eu queria que o primeiro teste verificasse se a divisão retornaria resto 0 pq ai sim seria divisivel por 2 e por 3, mas olhando o erro esta exatamente (eu creio no ==0 mesmo, pq… estou ali dizendo que quero o resultado da divisão igual a zero e não o resto… ) preciso saber como jogar o resto… (é mod ?)
olha o código… que montei
publicstaticvoidmain(String[]args){for(inti=100;i<=200;i++){if(((i/2)==0)&&((i/3)==0)){System.out.println(“Onúmero" + i + "éDivisivelpor2e3”);}else{if((i/2)==0){System.out.println(“Onúmero" + i + "éDivisivelpor2”);}else{if((i/3)==0){System.out.println(“Onúmero" + i + "éDivisivelpor3”);}}}}}}[quote]
ViniGodoy
Quando for postar código, use a tag code:
seucódigoaqui
Tem um botãozinho para isso na barra de ferramentas, na hora que você posta aqui no GUJ.
Cuidado, a tag chama-se code e não quote. Quote é para citar alguém.
faviandrade
Olá, gostaria de agradecer a todos … pelas dicas… mas acabei descobrindo aqui de tanto bater cabeça… desculpem… estou iniciando em java. (segue o código)
Grato.
classControleFluxoFor07{publicstaticvoidmain(String[]args){for(inti=100;i<=200;i++){if(((i%2)==0)&&((i%3)==0)){System.out.println("O número "+i+" é Divisivel por 2 e 3");}else{if((i%2)==0){System.out.println("O número "+i+" é Divisivel por 2");}else{if((i%3)==0){System.out.println("O número "+i+" é Divisivel por 3");}}}}}}
Magno_LC1 like
ViniGodoy:
Uma dica… os números divisíveis por 2 e 3 ao mesmo tempo são também os números divisíveis por 6.
boa a dica!
M
Mart
ainda acho que devia seguir a dica
if (((i % 6)==0))
nao tenho certeza osbre isso mas se ficar assim
if (((i % 2) ==0) && ((i % 3) ==0)) {
o codigo fica mais lento pq tem q validar 2 condições
publicstaticvoidmain(String[]args){for(inti=100;i<=200;i++){if(i%6==0)System.out.println("O número "+i+" é Divisivel por 2 e 3");else{if(i%2==0)System.out.println("O número "+i+" é Divisivel por 2");if(i%3==0)System.out.println("O número "+i+" é Divisivel por 3");}}}}
mais simples^^
faviandrade
Tb… pode ser…
Obrigado… pea dica.
Magno_LC
Mart:
ainda acho que devia seguir a dica
if (((i % 6)==0))
nao tenho certeza osbre isso mas se ficar assim
if (((i % 2) ==0) && ((i % 3) ==0)) {
o codigo fica mais lento pq tem q validar 2 condições
mais simples^^
Com certeza fica mais lento.
Pelo divisor por 6 o código fica mais limpo e agil, para qq explicação didática, é só por um comentário ao lado q fica legal!
ViniGodoy
Magno_LC:
Com certeza fica mais lento.
Pelo divisor por 6 o código fica mais limpo e agil, para qq explicação didática, é só por um comentário ao lado q fica legal!
Acho que a diferença de performance vai ser muito pequena para ser percebida. Aliás, muito, muito, muito pequena mesmo. O que realmente aumenta a performance é fazer isso aqui:
class ControleFluxoFor07b {
public static void main(String[] args) {
//204 é o primeiro número divisível por 6 que é também maior que 200
//Pulamos de 6 em 6, para encontrar os próximos números
for (int i = 204; i <= 300; i +=6 ) {
System.out.println("O número " + i + " é Divisivel por 2 e 3");
}
}
Agora sim, nenhuma comparação e o algoritmo ainda percorre 1/6 dos números da versão anterior.
M
Mart
porém nao é isso que ele queria fazer, pelo que entendi ele qria listar todos os numeros
divisiveis por 2, por 3 e por 2 e 3, logo c o numero nao eh divisivel pelos 2 (so por 1 deles) ele qr q apareça a mensagem
a diferença pode ser pequena num programa assim, mas se for num sistema grande, cada"detalhe" faz um diferencial la na frente
PS: gostei da logica
for (int i = 204; i <= 300; i +=6 )
^^, mas axo q mesmo assim nao cabe ao problema dele
Giulliano
publicclassControleFluxoFor07{publicstaticvoidmain(String[]args){for(inti=200;i<=300;i++){booleandivisivelPorDois=false;booleandivisivelPorTres=false;divisivelPorDois=(i%2==0);divisivelPorTres=(i%3==0);if(divisivelPorDois&&divisivelPorTres){System.out.println("O número "+i+" é Divisivel por 2 e 3");}elseif(divisivelPorDois){System.out.println("O número "+i+" é Divisivel por 2");}elseif(divisivelPorTres){System.out.println("O número "+i+" é Divisivel por 3");}else{System.out.println("O número "+i+" não é divisivel por 2 e/ou por 3");}}}}
Magno_LC
ViniGodoy:
Uma dica… os números divisíveis por 2 e 3 ao mesmo tempo são também os números divisíveis por 6.
:!:
sergiotaborda
Giulliano:
publicclassControleFluxoFor07{publicstaticvoidmain(String[]args){for(inti=200;i<=300;i++){booleandivisivelPorDois=false;booleandivisivelPorTres=false;divisivelPorDois=(i%2==0);divisivelPorTres=(i%3==0);if(divisivelPorDois&&divisivelPorTres){System.out.println("O número "+i+" é Divisivel por 2 e 3");}elseif(divisivelPorDois){System.out.println("O número "+i+" é Divisivel por 2");}elseif(divisivelPorTres){System.out.println("O número "+i+" é Divisivel por 3");}else{System.out.println("O número "+i+" não é divisivel por 2 e/ou por 3");}}}}
Eu costumava colocar esta pergunta em testes de avaliação java para saber se a pessoa programa limpo. A resposta que se eu procurava era esta.
Dividir por 6 tem um problema muito grave : magic number. Mesmo que faça algo do tipo %(2*3) continua escondido o porquê dividir por este valor
equivale a saber que o numero é divisivel por ambos os valores. Isto significa que este código não é limpo. E código limpo é mais importante que o código "rápido". Além disso, dividir por 6 nem sequer é mais rápido porque exige 3 divisões. Divisões são operações mais lentas que operações lógicas como &&. Seria uma opção se o objetivo fosse apenas detectar os numeros divisiveis por ambos, mas mesmo assim exigira um comentário de implementação sobre essa propriedade matemática.
contudo, no seu caso, eu ainda teria cortado 1% porque causa da inicialização desnecessária ;)
publicclassControleFluxoFor07{publicstaticvoidmain(String[]args){for(inti=200;i<=300;i++){booleandivisivelPorDois=(i%2==0);booleandivisivelPorTres=(i%3==0);if(divisivelPorDois&&divisivelPorTres){System.out.println("O número "+i+" é Divisivel por 2 e 3");}elseif(divisivelPorDois){System.out.println("O número "+i+" é Divisivel por 2");}elseif(divisivelPorTres){System.out.println("O número "+i+" é Divisivel por 3");}else{System.out.println("O número "+i+" não é divisivel por 2 e/ou por 3");}}}}
ViniGodoy
Realmente, se precisa listar todos a lógica que postei não serve.
Se o mais rápido é adequado ou não, só a aplicação irá dizer. Nesse caso, obviamente, você pode escrever do jeito que quiser, que a diferença de performance não será perceptível.
E o ideal é sempre priorizar o código mais legível e não o mais rápido.
Giulliano
Essa inicialização desnecessária foi proposital, para que o dono da thread pudesse achar uma melhoria, mas agora vc estragou tudo …rs
Concordo com o que foi dito, código limpo é muito melhor que código “perfomático”, mesmo por que o tempo de resposta de um processamento normalmente fica abaixo de 0,5 segundos. Performance é preocupação quando precisarmos usar EJB, Servlets, JPA…mas aí são outros quinhentos.