Ir ao conteúdo
  • Cadastre-se

Duvida ArrayList


Ir à solução Resolvido por dontpanic,

Posts recomendados

criei um sistema dado, no qual a classe Random faz o sorteio aleatorio de duas ArreysList, "dado1 e dado2" o prblema é quando faz o sorteio aleatorio das Arrays,  em vez de aparecer o "6" aparece o "0",na variavel inteiro dado porque ??? e como faço para resolver???, ja que os duas ArreyLyst eu criei adicionei a numeração 1 a 6.

import java.util.Arrays;import java.util.ArrayList;import java.util.Random;public class dados{    public static void main(String[] args){        ArrayList <Integer> dado1 = new ArrayList<Integer>();        dado1.add(1);        dado1.add(2);        dado1.add(3);        dado1.add(4);        dado1.add(5);        dado1.add(6);    System.out.println(dado1.toString());        ArrayList<Integer> dado2 = new ArrayList<Integer>();        dado2.add(6);        dado2.add(5);        dado2.add(4);        dado2.add(3);        dado2.add(2);        dado2.add(1);    System.out.println(dado2.toString());    System.out.println(dado1.get(5));    System.out.println(dado2.get(0));            String valor1 = "3";    String valor2 = "6";    String result = valor1+valor2;    System.out.println("String: " +result);    Integer result2 = new Integer(result);    System.out.println("Integer: " +result2);    System.out.println("quantos elementos dados1: "+dado1.size());    System.out.println("quantos elementos dados2: "+dado2.size());    // o sorteio feito no codigo abaixo: a variavel inteiro dado estar concatenada das duas ArrayList    Random d= new Random();    int indiceDado1 = d.nextInt(dado1.size());    int indiceDado2 = d.nextInt(dado2.size());    System.out.println(indiceDado1+""+indiceDado2);    String dado3 = indiceDado1+""+indiceDado2;    System.out.println(dado3);    Integer dado = new Integer(dado3);    System.out.println(dado);   //encontrei mais um problema, a variavel int result2 estar no valor 35, e eu criei um fluxo condicional com if, para que //quando A VARIAVEL DADO sortear o valor 35 apareça a mensagem "GANHOU JOGO"        if (result2==dado){        System.out.println("GANHOU JOGO");        }        else{        System.out.println("PERDEU JOGO");        }//mesmo o resultado sendo igual, result2=35 e dado = 35 o sistema informa  "PERDEU JOGO". porque??? se as //variaveis inteiras estão iguais.    }}
Link para o comentário
Compartilhar em outros sites

vamos la, deixa eu tentar explicar de uma forma melhor

 

crie duas ArrayList inteiros, chamada de dado1 e dado2 ok??

 

ambas as duas eu adicionei a numeração de 1 a 6 ok?

public static void main(String[] args){        ArrayList <Integer> dado1 = new ArrayList<Integer>();        dado1.add(1);        dado1.add(2);        dado1.add(3);        dado1.add(4);        dado1.add(5);        dado1.add(6);    System.out.println(dado1.toString());        ArrayList<Integer> dado2 = new ArrayList<Integer>();        dado2.add(6);        dado2.add(5);        dado2.add(4);        dado2.add(3);        dado2.add(2);        dado2.add(1);    System.out.println(dado2.toString());    System.out.println(dado1.get(5));    System.out.println(dado2.get(0));Agora eu simulei um  resultado que é a concatenação de duas variaveis. "result2" é uma variavel inteiro.       String valor1 = "3";    String valor2 = "6";    String result = valor1+valor2;    System.out.println("String: " +result);    Integer result2 = new Integer(result);    System.out.println("Integer: " +result2);com a classe Random eu faço o um sorteio aleatorio dos numeros q eu adicionei nas ArreyLyst "dado1" e "dado2". Ambos as duas Arrays estão concatenados na variavel inteiro "dado".o problema estar aqui, o sorteio é como se eu estivesse jogando dado, e nao aparece o numero 6 no sorteio, parece, 00, 34, 55, 50, 05...e se obeservar nas arreysList eu nao adicionei o 0 e sim o 6???    Random d= new Random();    int indiceDado1 = d.nextInt(dado1.size());    int indiceDado2 = d.nextInt(dado2.size());    System.out.println(indiceDado1+""+indiceDado2);    String dado3 = indiceDado1+""+indiceDado2;    System.out.println(dado3);    Integer dado = new Integer(dado3);    System.out.println(dado);outro problemaeu crie a condição se a variavel inteiro result2=35 for igual a variavel inteiro dado= "sorteio dos numeros ArrayList" apareça a mensagem "GANHEI JOGO". Caso contrario "PERDEU JOGO". So que mesmo os resultados estando iguais( result2=35 for igual a variavel inteiro dado= "sorteio dos numeros ArrayList" )   a mensagem é sempre a mesma. "PERDEU JOGO"if (result2==dado){        System.out.println("GANHOU JOGO");        }        else{        System.out.println("PERDEU JOGO");        }

o programa compila numa boa e executa tb, so os resultados estão incorretos pela forma q os codigos foram escritos.

 

obrigado pela atenção

Link para o comentário
Compartilhar em outros sites

A função nextInt(n) do Random retorna um número entre 0 (inclusivo) e n (exclusivo).

Então nextInt(6) vai retornar um número entre 0 e 5. nextInt(n) vai retornar um número entre 0 e n-1.

Sobre o segundo problema, você tá comparando duas strings com o operador '=='. O java trata strings como objetos, então mesmo que elas tenham valores iguais, elas são dois objetos diferentes. Por isso que a igualdade nunca retorna true. Pense nisso como duas pessoas que possuem o mesmo nome. Elas possuem o mesmo nome mas são pessoas diferentes... é mais ou menos assim com as strings no java.

Pra fazer a comparação dos valores delas, use a função equals:

if (result2.equals(dado))

Link para o comentário
Compartilhar em outros sites

"A função nextInt(n) do Random retorna um número entre 0 (inclusivo) e n (exclusivo).
Então nextInt(6) vai retornar um número entre 0 e 5. nextInt(n) vai retornar um número entre 0 e n-1."

 

entenda, eu crie uma arrayList quero fazer o sorteio dos valores que estão dentro do ArrayLyst "1 a 6".

o metodo "dado1.size()" informa os(ou quantos) elementos tem dentro desse ArrayList, então o metodo Random vai fazer o sorteio aleatorio desses elentos.

sabemos nos q ele estar fazendo esse sorteio aleatorio, so nos valores 0 a 5 e eu adicionei 1 a 6.

"Eu quero trabalhar com os valores estão dentro dos ArraysLyst. "dado1"  "dado2".

    Random d= new Random();    int indiceDado1 = d.nextInt(dado1.size());    int indiceDado2 = d.nextInt(dado2.size());    System.out.println(indiceDado1+""+indiceDado2);    String dado3 = indiceDado1+""+indiceDado2;    System.out.println(dado3);    Integer dado = new Integer(dado3);    System.out.println(dado);

outro problema:

realmente resolveu o problema muito obrigado, mas observe que eu converti as Strings para inteiros, mas mesmo assim tive usar equals.

 

agora me ajude a resolver o 1º problema.

 

fico grato pela atenção

Link para o comentário
Compartilhar em outros sites

Eu entendi o problema.

Mas como eu disse, o método nextInt(n) retorna valores entre 0 e n-1.

// dado1.size() é igual a 6// então o código abaixo é o mesmo que ...d.nextInt(6)int indiceDado1 = d.nextInt(dado1.size());
Isso significa que d.nextInt() vai retornar valores entre 0 e 5. É assim que essa função funciona.

Se você quiser que retorne valores entre 1 e 6 basta somar +1 a esse valor.

Link para o comentário
Compartilhar em outros sites

beleza fera deu certo,o numeral "6" estar aparecendo, eu fiz dessa forma:

    int indiceDado1 = d.nextInt(dado1.size()+1);    int indiceDado2 = d.nextInt(dado2.size()+1);

so que tem problema, o zero "0" tambem estar aparecendo, eu quero eliminar o "0", quero fique so de 1 a 6, como faço???

 

obrigado pela atenção!!!

Link para o comentário
Compartilhar em outros sites

  • Solução
int indiceDado1 = d.nextInt(dado1.size()+1);

Veja, desse modo você tá adicionando +1 a função size(), então em vez de ter nextInt(6) que retorna um número entre 0 e 5, agora você tem nextInt(7), que retorna um número entre 0 e 6.

Pra pegar um número entre 1 e 6, você precisa adicionar +1 ao resultado do nextInt():

int indiceDado1 = d.nextInt(dado1.size()) + 1;
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...