Verificar se um numero e dividido por outro

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.

  1. Cuidado. i++ não é a mesma coisa que i+1.
  2. Mesmo que fosse, não faz sentido fazer valor[i] / valor[i+1], pois valor[i+1] ainda não teria sido lido.
  3. 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:

  1. Na linha do i++, você ainda tinha o valor antigo de i;
  2. 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:

  1. Primeiro leia todos os números num for;
  2. 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
}