Arrays

3 respostas
W

Boa tarde pessoal!
Sou novo em java e estou com uma duvida em um exercício que estou fazendo.

Programe um método que recebe um array de objetos do tipo Circulo e um valor double. O método vai
procurar no array um objeto que tenha como raio o valor passado no parâmetro. Se encontrar só na primeira
metade do array, vai retornar 1; só na segunda metade, vai retornar 2; se aparecer na primeira e na segunda
metade, retornará 3; se não achar, vai retornar 0.

Montei a classe Circulo e esse método, porem não está funcionando os retorno 2, 3 e 0.
Se alguém poder ajudar...

public class Circulo {

    private int raio;

    public Circulo(int raio) {
        this.raio = raio;
    }

    public int getRaio() {
        return raio;
    }

    public void setRaio(int raio) {
        this.raio = raio;
    }

   public int buscaArray(Circulo[] ar, int num) {
        int result = 0;

        //contador para verificar a existencia na primeira metade do array
        int existe = 0;

       


            //verfica a primeira metade
            for (int j = 0; j < ar.length / 2; j++) {
                if (num == ar[j].getRaio()) {
                    result = 1;

                    if (result == 1) {
                        existe = 1;
                    }
                }

            }

            
            //verifica a segunda metade
            for (int j = ar.length+1; j > ar.length/2+1; j--) {
                if (num == ar[j].getRaio()) {
                    result = 2;

                    if (existe == 1) {
                        result = 3;
                    }
                }
            }
            
        for (int i = 0; i < ar.length; i++) {
            if (num != ar[i].getRaio()) {
                result = 0;
            }
        }
            

        

        return result;
    }
}

Teste

public class TesteCirculo {

    public static void main(String[] args) {

        Circulo[] circulos = new Circulo[10];



        for (int i = 0; i < circulos.length; i++) {

            circulos[i] = new Circulo(1 + (int) (Math.random() * 10));

        }

        for (int i = 0; i < circulos.length; i++) {

            System.out.println(circulos[i].getRaio());

        }




        System.out.println("Verifica");
        Circulo c = null;
        System.out.println(c.buscaArray(circulos, 7));



    }
}

E na teste sempre que eu executo no netbeans ele me retorna a mensagem:

at TesteCirculo.main(TesteCirculo.java:27)
Java Result: 1

3 Respostas

mauricioadl

ta faltando vc dar um new no objeto c.

Circulo c = new Circulo();

discorpio

Bom dia a todos.

Não só faltou instanciar a classe Círculo na classe main, como também há erro de lógica nos índices dos loops na classe Círculo. Então vamos corrigí-la.

public class Circulo {
    
    private int raio;
    private int existe = 0; //Variável existe tem que ser declarada aqui com o valor iniciado em zero (0).
  
    public Circulo(int raio) {  
        this.raio = raio;  
    }  
  
    public int getRaio() {  
        return raio;  
    }  
  
    public void setRaio(int raio) {  
        this.raio = raio;  
    }  
  
   public int buscaArray(Circulo[] ar, int num) {
       
        //Contador dos loops pela metade
        int cont = ar.length / 2;
  
        //verfica a primeira metade  
        for (int j = 0; j &lt; cont; j++) {  
             if (num == ar[j].getRaio()) {  
                 existe = 1;
                 break; //Ao encontrar pare o loop de verificação
             } 
        }  
  
        /*verifica a segunda metade
          o ar.length tem que ser menos um e não mais um
          se não dar erro de indice outbounds exception, porque
          o lenght ficaria com 11 indices ao invés de 9,
          Além disso, se contador j esta contando valores maiores
          ou igual a metade, então essa metade não pode sofrer alteração
          porque o contador vai contar quando o número for maior ou igual que ela,
          quando for menor, pára de contar. */
        for (int j = ar.length - 1; j >= cont; j--) {  
             if (num == ar[j].getRaio()) {
                    /* Se o número já estiver na primeira
                       metade, então o existe será = 1 e vai,
                       receber o valor 3, se não, ela vai ser 0 (zero),
                       e é ai que recebe o valor 2
                     */
                    if (existe == 1) {  
                        existe = 3;  
                    } else {
                        existe = 2;
                    }
                    break; // Ao encontrar, pare o loop de verificação. 
                }  
       }
       return existe;  
    }
    
}

Agora siga o dica do nosso amigo Mauricioadl, instanciando a classe Círculo, senão vai dar erra de NullPointerException, assim:

public class TesteCirculo {

    public static void main(String[] args) {
        Circulo[] circulos = new Circulo[10];  
 
        for (int i = 0; i &lt; circulos.length; i++) {   
            circulos[i] = new Circulo(1 + (int) (Math.random() * 10));   
        }  
  
        for (int i = 0; i &lt; circulos.length; i++) {  
            System.out.println(circulos[i].getRaio());  
        }  
  
        System.out.println("Verifica");
        /* Instancie aqui a classe Círculo fornecendo o raio
            eis que voce programou o seu construtor assim
            para recebê-lo  */  
        Circulo c = new Circulo(20); 
        System.out.println(c.buscaArray(circulos, 7));  
    }
}

Um abraço.

W

Bom dia pessoal!

Muito obrigado mesmo a todos pela ajuda!!

Criado 27 de novembro de 2011
Ultima resposta 28 de nov. de 2011
Respostas 3
Participantes 3