[RESOLVIDO]Erro com a estrutura For

Olá, estou com um problema estranho que não faço ideia de como resolver.

Estou fazendo um código para verificar se um número é múltiplo de outro (talvez minha lógica esteja errada).

Sou iniciante em programação e ainda não sei usar o FOR direito,aqui está o código:

verificar.java:

public class verificar {
  public boolean verificador (float numero1 , float numero2){
   float resultado;
   boolean emultiplo ;
   float[] multiplos ;
   multiplos = new float [10];
   int i;
   for (i = 0 ; i <= 10 ; i ++){
        
     multiplos[i] = numero2 * i;
          
    }
   if (numero1 != multiplos[i]){
         emultiplo = false;
     }
     else{
         emultiplo = true;
     }
   return emultiplo;
  }
}

Executar_verificar.java:

import java.util.Scanner;
public class Executora_verificar {
  public static void main (String args []){
    float numero1 , numero2;
    Scanner entrada = new Scanner (System.in);
    verificar Executor = new verificar ();

    System.out.println ("Digite o primeiro número:");
    numero1 = entrada.nextFloat();
    
    System.out.println ("Digite o segundo número:");
    numero2 = entrada.nextFloat();
    
    
    
    
    if (Executor.verificador(numero1 , numero2)){
      System.out.println ("O número "+numero1+" é múltiplo de "+numero2);
    }else{
      System.out.println ("O número "+numero1+" não é múltiplo de "+numero2);
    }
  }
}

O código é compilado corretamente mas quando ele é executado aparecem erros estranhos:

java.lang.ArrayIndexOutOfBoundsException: 10
at verificar.verificador(verificar.java:10)
at Executora_verificar.main(Executora_verificar.java:16)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:271)

Outra dúvida é :por que tudo que eu faço dentro do for não pode ser usado fora dele?

por exemplo :

public class teste{
 public static void main (String args []){

boolean booleana;

int [] vetor;
vetor = new int [10];


for ( int i = 0 ; i <=10 ; i ++){
vetor[i] = i ;
booleana = true;

}

/* A variável  booleana e o vetor[] se tornam "inutilizaveis" fora do FOR

Ocorrem erros como "variable might not have been initialized" ou "cannot find simble i" */

Desde já agradeço a ajuda.

othman,

quando você tem um vetor de 10 posições (como é seu caso), as posições vão variar de 0 a 9. Então no seu caso, se você quiser percorrer o vetor inteiro, na condição do for você deve utilizar < 10, e não <= 10. Isso faz com que ele acuse um erro de OutOfBounds porque não existe posição 10 no vetor :wink:

Sobre a sua segunda dúvida, o problema é que se você tenta manipular alguma variável que não tenha sido inicializada, ele vai acusar erro. Você vai estar tentando mexer com um valor que não existe de variável. No seu caso, você apenas declarou a variável booleana, mas não atribuiu nenhum valor a ela.

[]'s e bons estudos!

Boa noite a todos.

Há dois erros de lógica ai.

O primeiro deles é que a verificação se o número1 está contido no vetor de multiplos[10] está fora do laço "For", logo a variável I desse vetor sempre será 10 e nunca vai sair disto.

Esta é sua versão corrigida.

public class verificar {  
  public boolean verificador (float numero1 , float numero2){
        float resultado; // Não entendi essa declaração que não está sendo usada dentro do método    
        boolean emultiplo = false;
        float[] multiplos = new float [10];  
        for (int i = 0 ; i &lt;= 10 ; i ++){  
             multiplos[i] = numero2 * i;  
              if (numero1 == multiplos[i]){  
                  emultiplo = true;
                  break;   
              }  
        }  
        return emultiplo;  
    }  
}

Mesmo fazendo está correção ainda continua com o erro de lógica que é o segundo erro que citei.

Ora, se voce quer saber se o numero1 é múltiplo do numero2 ambos passados por parâmetros no método, para que então o vetor de numeros float :?: :?: :?:

Ainda assim, a lógica de saber se um determinado número é múltipo de um outro determinado número, basta dividir um pelo outro e se o resto da divisão for zero então eles são múltiplos, e dentro do Java, você pega o valor do resto de um divisão através do operador "%" que representa o operador Mod do Java. Então vamos mais uma vez corrigir a sua função.

   public boolean isMultiplo(Double numero1, Double numero2){
         Double resto = numero2 % numero1;
         if (resto == 0.0) {
             return true;
         } else {
             return false;
         }
   }

Repare que eu usei os valores da Classe Double, que são mais confiáveis do que os valores primitivos float e até o valor primitivo double (com "d" minúsculo).

Bem mais simples do que declarar aquelas vairáveis todas não :idea: :roll: :idea:

Nossa,muito obrigado as respostas foram muito esclarecedoras.

Eu não tinha reparado no detalhe do vetor (agora não vou cometer mais esse erro).

Eu não sabia para que servia o operador % (até agora).

A principio eu tinha colocado o If dentro do For mas tirei ele achando que isso era o motivo do erro.

Sou iniciante e ainda vou enfrentar muitos erros bestas como este :smiley:

Agradeço a atenção e espero um dia poder ajudar mais iniciantes perdidos como eu RSRSRS.

Olá, sou eu de novo.

[quote=othman]Nossa,muito obrigado as respostas foram muito esclarecedoras.

Eu não tinha reparado no detalhe do vetor (agora não vou cometer mais esse erro).

Eu não sabia para que servia o operador % (até agora).

A principio eu tinha colocado o If dentro do For mas tirei ele achando que isso era o motivo do erro.

Sou iniciante e ainda vou enfrentar muitos erros bestas como este :smiley:

Agradeço a atenção e espero um dia poder ajudar mais iniciantes perdidos como eu RSRSRS.

[/quote]

Só para lembrar que eu também já fui um iniciante perdido como tu. E se você gosta realmente de Tecnologia da Informação, ao aprender, compartilhe também com aqueles que ainda não sabem, isto porque, eu aprendo muito mais ensinando, do que lendo.