Fala pessoa estou com um problema para ver se um numero é divisivel por outro.
importjavax.swing.*;publicclassb_divisivelpor_a{publicstaticvoidmain(Stringargs[]){floatvalor[]=newfloat[3];for(inti=0;i<valor.length;i++){valor[i]=Float.parseFloat(JOptionPane.showInputDialog(null,"Digite O valor"));scape=valor[i]/valor[i++];}if(valor[i]%valor[i++]==0){JOptionPane.showConfirmDialog(null,"A é Divisivel por B");}else{JOptionPane.showConfirmDialog(null,"A não é divisivel Por B");JOptionPane.showConfirmDialog(null," o valor da divisão é = "+scape);}}}
Mesmo que fosse, não faz sentido fazer valor[i] / valor[i+1], pois valor[i+1] ainda não teria sido lido.
Além disso, considere o que aconteceria na última iteração do seu for (valor[i+1] seria uma posição inválida).
Repense toda sua lógica. Aparentemente você está complicando o exercício muito mais do que deveria.
MartinsAndreDablio
Claramente dá pra fazer sem array, mas estou sentindo a necessidade de dominar mais os vetores.
ViniGodoy
Ok, mas observe o que i++ faz:
int i = 10;
System.out.println(i++); //Imprime 10
System.out.println(i); //Imprime 11
Perceba que:
Na linha do i++, você ainda tinha o valor antigo de i;
Na linha seguinte, i mudou de valor.
Além disso, pense no que essa linha quer dizer:
scape=valor[i]/valor[i+1];
Você está dizendo para dividir valor pelo próximo número do array. Porém, esse número ainda nem foi lido.
Se quer usar arrays:
Primeiro leia todos os números num for;
Depois, faça um novo for para mostrar as divisões e se é ou não divisível.
Finalmente, corrija sua indentação. Observe que o if lá debaixo está fora do for. E que tanto o for e a variável float da linha 05 estão dentro do main.
MartinsAndreDablio
Corrige pra mim por favor ViniGodoy.
importjavax.swing.*;//AndréMartins...publicclassb_divisivelpor_a{publicstaticvoidmain(Stringargs[]){floatvalor[]=newfloat[2];for(inti=0;i<valor.length;i++){valor[i]=Float.parseFloat(JOptionPane.showInputDialog(null,"Digite O valor"));}for(inti=0;i<valor.length;i++){if(valor[i]%valor[i+1]==0){floatscap=valor[i]/valor[i+1];JOptionPane.showConfirmDialog(null,"A é Divisivel por B");JOptionPane.showConfirmDialog(null,"Valor da divisão"+scap);}else{floatscap=valor[i]/valor[i+1];JOptionPane.showConfirmDialog(null,"A não é divisivel Por B");JOptionPane.showConfirmDialog(null,"Valor da divisão"+scap);}}}}
Agradeço…
MartinsAndreDablio
esse problema de identação no primeiro float foi na hora de copiar.
Arthur_F_Ferreira
Cara, eu não sei por onde você está estudando, mas a apostila da Caelum é bastante completa e explica direitinho todos esses pontos que você está com dificuldade:
Se já estiver estudando por ela, sugiro que releia os conceitos da apostila para entender. Geralmente eu não gosto de colar a solução do código para quem está aprendendo, mas vamos lá.
O problema com o seu código é que ele funciona na primeira iteração do seu loop. Na segunda iteração, ele não funciona porque vc faz i + 1 no if e não existe a posição 2 no seu vetor. Como o seu vetor só possui duas posições, só existe a posição 0 e 1.
Nesse seu caso de querer calcular se um número é divisível por outro, você poderia usar duas variáveis que fica mais simples.
MartinsAndreDablio
obrigado pela dica, estou passando para o segundo período da faculdade só estava estudando lá mesmo, referente ao código sei que seria muito mais fácil fazer a comparação com duas variáveis a questão é que estou querendo dominar o array. valeu obrigado…
felipetce
Prezados,
Estou tendo problema com o seguinte caso:
float a = 0.17; float b = 0.01;
if(a%b!=0){
//Nãodivisivel
}
Para este caso é divisivel, porem entra no if, como posso resolver este problema?
TerraSkilll
felipetce
Se você simplesmente fizer o cálculo do módulo (no Java), verá por que é que o algoritmo diz que não é divisível:
float a = 0.17f;
float b = 0.01f;
System.out.println("Resto: " + (a % b));
Exibirá:
Resto: 5.5879354E-9
Que obviamente é diferente de zero, mesmo que 0.17 * 0.01 seja igual a 17.0. Lembrando que, no Java, é possível (embora incomum) calcular o módulo para float e double, então 0.17 % 0.01 não faz cast para int (ficando 0 % 0).
Abraço.
felipetce
TerraSkilll,
Acho que não é a melhor solução, porem o que me atendeu foi o seguinte: