Fala pessoa estou com um problema para ver se um numero é divisivel por outro.
import javax.swing.*;
public class b_divisivelpor_a {
public static void main(String args[]){
float valor [] = new float[3];
for(int i = 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);
}
}
}
Agradeço pela atenção.
- Cuidado. i++ não é a mesma coisa que i+1.
- 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.
Claramente dá pra fazer sem array, mas estou sentindo a necessidade de dominar mais os vetores.
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.
Corrige pra mim por favor ViniGodoy.
import javax.swing.*;
// André Martins...
public class b_divisivelpor_a {
public static void main(String args[]){
float valor [] = new float[2];
for(int i = 0; i<valor.length;i++) {
valor[i]=Float.parseFloat(JOptionPane.showInputDialog(null,"Digite O valor"));
}
for(int i = 0; i<valor.length;i++){
if(valor[i] % valor[i+1] == 0){
float scap = valor[i] / valor[i+1];
JOptionPane.showConfirmDialog(null,"A é Divisivel por B");
JOptionPane.showConfirmDialog(null,"Valor da divisão"+scap);
}else{
float scap = valor[i] / valor[i+1];
JOptionPane.showConfirmDialog(null,"A não é divisivel Por B");
JOptionPane.showConfirmDialog(null,"Valor da divisão"+scap);
}
}
}
}
Agradeço…
esse problema de identação no primeiro float foi na hora de copiar.
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.
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…
Prezados,
Estou tendo problema com o seguinte caso:
float a = 0.17;
float b = 0.01;
if(a % b != 0){
//Não divisivel
}
Para este caso é divisivel, porem entra no if, como posso resolver este problema?
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.
TerraSkilll,
Acho que não é a melhor solução, porem o que me atendeu foi o seguinte:
float a = 0.17;
float b = 0.01;
DecimalFormat df= new DecimalFormat(".##");
float resultado = Float.valueOf(df.format(a/b));
int resultadoInteger = (int)resultado;
// Verifica se os valores são divisiveis
if((resultado-resultadoInteger)!=(float)0){
//Não divisivel
}