Sink a dot com...exercício Head First Java...ajuda com matriz

Bom dia pessoal, estou estudando o livro Head First Java e no capítulo 5 me deparei com um exercício que me deixou com algumas dúvidas, primeiramente os códigos do exercício são os seguintes:

package dotcom;

public class SimpleDotCom {

    int[] locationCells;
    int numOfHits = 0;

    public void setLocationCells(int[] locs) {
        locationCells = locs;
    }

    public String checkYourself (String stringGuess) {

        int guess = Integer.parseInt(stringGuess);

        String result = "miss";

        for (int cell : locationCells) {
            if ( guess == cell){
                result = "hit";
                numOfHits++;
                break;
            }
        }

        if (numOfHits == locationCells.length){
            result = "kill";
        }

        System.out.println (result);

        return result;

            }
}
package dotcom;

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

        int numOfGuesses = 0;

        GameHelper  helper = new GameHelper();

        SimpleDotCom theDotCom = new SimpleDotCom();
        int randomNum = (int) (Math.random() * 5);

        int[]  locations = {randomNum, randomNum + 1 , randomNum + 2};

        theDotCom.setLocationCells(locations);

        boolean isAlive = true;

        while (isAlive == true){

            String guess = helper.getUserInput ("Insira um número");
            String result = theDotCom.checkYourself(guess);

            numOfGuesses++;
            if (result.equals("kill")) {
                isAlive = false;

                System.out.println ("Você usou " + numOfGuesses + "palpites");
            }
        }

    }
}

Uma breve explicação do exercício: Eu tenho que acertar as 3 posições onde uma Dot Com está para que eu a elimine ( afunde, estilo batalha naval porém em uma linha só) essas posições são por exemplo 4,5,6…a partir do primeiro número randomico de 0 a 4 ( pois o limite são 7 posições) que o programa encontrar ele soma mais 1 e mais 2 para que a dot com esteja em 3 posições ( 0,1,2…ou…4,5,6) o que eu não intendi foi o seguinte:

Como o programa sabe em qual posição colocar algo para dizer que lá esta a posição onde esta parte da Dot Com ? digamos que inicialmente tudo seja 0, quando as posições forem mudadas o valor daquela posição muda de 0 para 1 e quando eu for tentar adivinhar onde esta a Dot Com se o lugar que eu “chutei” for diferente de 0 então o programa intende que ali está parte da Dot Com ?

Desculpem se ficou muito confuso, qualquer dificuldade de intendimento eu tento deixar minha dúvida de uma forma mais claro.

[]'s

obs: Eu sei que em momento algum eu limitei o tamanho dessa matriz

edit: Uma dúvida que eu havia esquecido de colocar: Pessoal quando vou atribuir algo para uma matriz eu sempre tenho que fazer com Colchetes ? ou posso usar parênteses ? qual a diferença ( se é que tem alguma, digo isso porque realmente não sei) ?

int randomNum = (int) (Math.random() * 5); int[] locations = {randomNum, randomNum + 1 , randomNum + 2}; theDotCom.setLocationCells(locations);

Cara… na linha 1 defines um número Randomico que vai no máximo até 5… Na linha 2 vais determinar quais as três posições de tua DotCom, tendo em vista que randomNum só pode ser até 5, tua DotCom só vai poder ir até a posição 7(ver próxima explicação)… Na linha 3 vais pegar a matriz de inteiros criada na classe SimpleDotCom e preencher com tua matriz locations recém-criada, agora perceba, o tamanho da tua matriz é 3 e não 7, pois só passaste 3 elementos pra ela, ou seja randomNum, randomNum + 1 e randomNum + 2, essa matriz vais de 0 - 2 posições na matriz e de 0 - 7 valores de elementos dentro da matriz

exemplos: locations = {0,1,2}, locations = {1,2,3}, locations = {2,3,4}, …, locations = {5,6,7};

Sacou ???

Quanto as matrizes… sim somente os colchetes, parenteses são usados para identificar métodos e chaves como delimitadores de escopo de método ou para receber valores de matrizes como está no exemplo e algumas coisinhas mais…

Qualquer dúvida posta aí…

Mas o que eu não intendi foi o seguinte: se os valores 2,3,4 forem passados para a matriz maior…falando em índice, esses valores vão ficar no índice 2,3,4 ou vão ficam no índice 0,1,2 ?

Adriano, não se esqueça… Math.random() gera um double de 0 até um número menor do que 1. Quando fazemos o casting para um de uma multiplicação deste valor por um int nunca conseguimos chegar ao int especificado na multiplicação. O máximo que podemos conseguir é um número 4,99999 que quando fazermos o cast vira 4.

Os resultados gerados iram de 0 até 4, e não 5 como o amigo adriano falou.

Sinister o que está acontecendo é bem simples, acho que se você imprimor a matriz gerada randômicamente vai entender.

São apenas um conjunto de número que podem ser de 0 à 6, porém que devem ser sequenciais, por isso seu random vai no máximo até 4.

Depois você escolhe um número de e ele diz se está na sua coleção.

Existem várias maneira de atribuir valores à matrizes. Siga o livro e com certeza vai encontrar mais exemplos.

Valew Bruno… era isso aí mesmo que estava esquecendo, ia pedir pra corrigirem caso estivesse esquecendo algo, mas passou lotado…

Pois bem sinister… como falei no Post anterior pegando seu exemplo da matriz locations = {2,3,4}

Elemento 2 -> Posição 0 da matriz
Elemento 3 -> Posição 1 da matriz
Elemento 4 -> Posição 2 da matriz

Falows :wink:

Muito obrigado Adriano e Bruno.

Adriano você conseguiu ir bem no ponto onde eu estava com a minha dúvida que era: sera que eu insiro nos 3 primeiros indíces da matriz maior os valores que estão na menor ou de alguma forma eu estava inserindo no indíce correspondente aos valores que eu tinha na matriz menor na maior.

Muito obrigado mais uma vez =]