Armazenar valor de uma posição de um vetor na posição de outro vetor

9 respostas
K

Galera estou fazendo um jogo e o que quero fazer é o seguinte:

  • Ao matar um monstro tem chance de cair algo dele ou não. Se cair, o jogador guarda o item na mochila.
    Na verdade vou fazer para ele escolher se quer pegar ou não mas isso é o de menos.

Em códigos…

System.out.println("Voce vence o guarda e encontra...");
                            chance = r.nextInt(itens.length * 2);
                            if (chance >= itens.length) {
                                System.out.println("...nada!");
                            } else {
                                System.out.println(itens[chance]);
                            }

Se a chance for menor que 4, que é a quantia de itens, ele derruba algum item.
O item que ele derrubar será o valor da posição “chance” no vetor “itens”.

Tenho o vetor mochila[10]

Como faço para armazenar o valor que está na posição “chance” do vetor “itens” na primeira posição livre do vetor “mochila” que tem 10 posições ?

Posição livre! Se ele pegar algo, a posição 0 do vetor “mochila” é ocupado e o próximo item que pegar será armazenado na posição 1!

Se alguém souber como fazer por favor me ajuda!!

OBG. ABRAÇOS :wink:

9 Respostas

kritiuns

pow legal essa paradinha que vc ta fazendo …

faz assim …

pesquise por java.util.List …

mais se quer mesmo utilizar array faça isso …

for(int i=0 ; i < mochila.length; i++){
     if(mochila[i] == null){
         mochila[i] = itens[chance];
     }
}

ou seja quando ele achar um espaço null ele vai colokar o valor de itens na mochila :smiley:

mais recomendo que use List

abraço!

L

O código do amigo kritiuns acima está quase certo, sendo que o código como está vai encher a mochila com referências ao mesmo item! Falta um break:

for(int i=0 ; i < mochila.length; i++){ if(mochila[i] == null){ mochila[i] = itens[chance]; break; } }

Porém, esse código não trata se não tem mais espaço na mochila…

boolean guardado = false; for(int i=0 ; i < mochila.length; i++){ if(mochila[i] == null){ mochila[i] = itens[chance]; guardado = true; break; } }

Também como o amigo disse acima, a interface java.util.List permite fazer essa operação com o método “add”. Seu código fica mais simples pois o objeto lista (por exemplo, ArrayList) já guarda qual é a posição do último espaço vazio! Um efeito colateral da ArrayList é que ela “cresce” para acomodar itens. Talvez isso seja ruim para sua mochila… Recomendo que você faça uma classe Mochila para tratar isso (e toda a lógica de guardar/manter/ordenar os itens)!! Sua classe Mochila pode utilizar uma lista ou um array para guardar os itens e ter toda a lógica encapsulada numa classe reutilizável!

kritiuns

Vlw pela correção brow ;D

L

:thumbup:

Mephy

leo.andven:
boolean guardado = false; for(int i=0 ; i < mochila.length; i++){ if(mochila[i] == null){ mochila[i] = itens[chance]; guardado = true; break; } }

eu não usaria o break, confunde o código, usando a própria variável booleana existente dá pra fazer o mesmo

boolean guardado = false; for (int i = 0; i< mochila.length; i++) { if (mochila[i] == null && (! guardado)) { mochila[i] = itens[chance]; guardado = true; } }

kritiuns

kkkk e onde é que esse for vai parar na hora que entrar no if ???
melhor usar o break e parar o processo não acha ?

L

Ok, vamos usar a variável de forma mais útil.

boolean guardado = false;
for(int i=0 ; !guardado && i < mochila.length; i++){
     if(mochila[i] == null){
         mochila[i] = itens[chance];
         guardado = true;
     }
}

Quer apelar?

int i = 0;

for(; mochila[i] != null && i < mochila.length; i++);

if (i < mochila.length) {
   mochila[i] = itens[chance];
} else {
  System.out.println("Sua mochila está cheia!");
}

:roll:

O mais limpo é fazer a classe Mochila…

Rodrigo_Sasaki

acho que o que o Mephy deixou passar despercebido, é que se ele usar a variável booleana no if… mesmo que o resultado final seja igual, ele ainda vai processar o for inteiro mesmo sem nunca mais entrar no if.

então não acho que seja melhor hehe…

kritiuns

Pow show de bola acho q o tópico fecho com o ultimo post leo.andven

Criado 19 de maio de 2011
Ultima resposta 19 de mai. de 2011
Respostas 9
Participantes 5