Duvida com codigo

Prezados senhores, sou novo aqui e desde já agradeço pela atenção dispensada, pois bem estou iniciando meus estudos em Java em casa mesmo em meus tempos livres e para ser sincero estou apanhando muito mais não desisto :stuck_out_tongue: , estou usando o livro Use a cabeça Java?.
Parece-me um excelente livro (auto-explicativo) já estou no capitulo 4 só que tem um exemplo que no estou conseguindo entender quando faço o teste na folha de rascunho, infelizmente o livro não discrimina o código linha a linha é por isso que não estou conseguindo entender ao momento de compilar me devolve como resultado 14 e 1 . Peço que por favor me ajudem a entender (linha a linha se for possível). Aqui esta o codigo:

[code]
public class Mix4 //Criaçaõ da clase Mix 4
{
int counter = 0; // declaro uma variavel counter do tipo inteiro e atribuo 0

//Declaração do metodo main
public static void main(String args[])
{
    int count = 0; // declaro uma variavel count do tipo inteiro e atribuo 0 

    Mix4[] m4a = new Mix4[20]; // declaro uma matriz (aqui tenho dúvida por que 20 e não 9 que esta no while?

    int x = 0; // declaro uma variavel x do tipo inteiro e atribuo 0 

    while(x < 9) // enquanto x seja menor que 9
    {
        //A partir de aqui em diante me confundo 
        m4a[x] = new Mix4();
        m4a[x].counter = m4a[x].counter + 1;
        count = count + 1;
        count = count + m4a[x].maybeNew(x);
        x = x + 1;
    }
    System.out.println(count +" " + m4a[1].counter);
}

//Declaração do metodo maybeNew com seu respectivo parámetro)
public int maybeNew(int index)
{
if(index < 5)
{
Mix4 m4 = new Mix4();
m4.counter = m4.counter + 1;
return 1;
}
return 0;
}
}[/code]
[color=red]Eu comentei parte que entendi do código, me corrigam se estou errado :smiley: [/color]
[color=#444444]Estou de ferias da faculdade faço o curso de Sistemas da Informação, estou entrando no 3º semestre e não quero esperar até o 5º o 6º para estudar, obrigado pela ajuda pessoal !!! [/color]

 while (x < 9) // enquanto x seja menor que 9
        {
            //Aqui o m4a[x] sempre será recriado
            m4a[x] = new Mix4();
            //Como ele foi recriado, sempre valerá 1, que é o resultado de m4a[x].counter + 1;
            m4a[x].counter = m4a[x].counter + 1;
            count = count + 1; 
            //o count sempre vale um valor, e é somamado de mais 1 que é sempre o 
            // retorno do método maybeNew(x) enquando index < 5
            count = count + m4a[x].maybeNew(x);  
            x = x + 1;
        }
        System.out.println(count + " " + m4a[1].counter);
Então será +/- assim:
             
    X->     0  1  2  3  4   5   6   7   8
    count   1  3  5  7  9   11 12 13 14
    count   2  4  6  8  10 11 12 13 14
A partir da X = 5, o retorno do maybeNew é ZERO pois o index já é pelo menos = a 5 também.
então na 2ª parte que soma o count, ele passa a receber O e não é incrementado em + 1..

E você tem um vetor não uma matriz, o autor colocou 20 posições talvez para criar a dúvida mesmo, poderia para obter o mesmo resultado usar 9 posições. Se colocar 8 por exemplo, vai dar erro por faltar “espaço” no vetor.

Não sei se você é novo também na programação, está cursando uma faculdade ou só quer aprender java. Mas já vou adiantando. Esse livro é muito focado na certificação e, portanto, vai focar no domínio da linguagem, não tanto em boas práticas de programação.

Esse código que você apresentou, por exemplo, é um caso de programa extremamente mal escrito. Não é à toa que você teve dificuldades em entende-lo. Se você está também aprendendo a programar, sugiro que procure outra bibliografia complementar, como o livro do Deitel, ou algum livro de algoritmos.

Outra coisa. A maior parte das IDEs tem o depurador. É uma ferramenta que permite que você rode seu código passo-a-passo. Eu conselho você a aprender a usa-lo, pois é muito instrutivo.

Romarcio e ViniGodoy obrigado pela ajuda , agora ficou mais claro o código, pois é troquei o 20 pelo 9 e deu o mesmo resultado, eu acho que o autor do livro colocou o vetor de 20 (linha 10) por que tem outras opções para teste (na linha 13 do while, você pode colocar as opções que dá o exemplo e tem uma onde x < 20, então tem que ter um vetor de 20 para que possa executar).

Estou entrando no 3º semestre do curso de sistemas de informação, e como estou férias da faculdade quero aproveitar para aprender Java, estou gostando muito do fórum, tem muita cosa bacana aqui, mais uma vez obrigado pessoal…

Isso ae Luvett estude bastante e depois venda um monte de trabalhinhos por 50 reais. (seu primeiro dindim ganho com programação) :smiley: