Arrays

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…

[code]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;
}

}

[/code]

Teste

[code]
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));



}

}[/code]

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

at TesteCirculo.main(TesteCirculo.java:27)

Java Result: 1

ta faltando vc dar um new no objeto c.

Circulo c = new Circulo();

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(&quot;Verifica&quot;);
        /* 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.

Bom dia pessoal!

Muito obrigado mesmo a todos pela ajuda!!