none
Exibir ArrayList dentro de ArrayList RRS feed

  • Pergunta

  • tenho uma funçãoque recebe um arraylist, onde em um índice encontrase uma string nome, um valor double e um outro arraylist com outros valores dentro dele.

    preciso em determinado momento, exibir apenas os valores dentro desse arraylist dentro do arraylist, como fazer isso?

    classe CPais
    {
    private string sPais;
    private double dDimensao;
    private ArrayList alFront;
    
    //contrutor
    {
    public CPais()
    this.sNome = "";
    this.dDimensao = 0.0;
    this.alFront = new ArrayList();
    }
    
    public void setPais(string pais)
    {
    this.sPais = pais;
    }
    public string getPais()
    {
    return this.sPais;
    }
    
    public void setDimensao(double dimensao)
    {
    this.dDimensao = dimensao;
    }
    public double getDimensao()
    {
    return this.dDimensao;
    }
    
    public void setFront(ArrayList front)
    {
    this.alFront = front;
    }
    public ArrayList getFront()
    {
    return this.alFront;
    }
    
    
    public void InsereDados()
    {
     ArrayList paises = new ArrayList()
    string spais = "";
    do
    {
    Console.Write ("Digite um país vizinho\nOu digite 0 para sair: ");
    spais = Console.ReadLine();
    
    paises.Add(spais);
    }while (spais != "0");
    
    alFront.Insert(0, paises); //insiro o arraylist dentro do arraylist principal
    
    //função que deve exibir apenas os paises inseridos dentro do arraylist que está dentro do arraylist principal
    public void Exibe(ArrayList exibe)
    {
    //aqui eu tentei de todas as maneiras e não consegui
    }
    
    }
    
    //já na função principal
    static void Main (string[] args)
    {
    ArrayList arrayPaises = new ArrayList()
    
    for (int i = 0; i < 5; i++)
    {
    CPais paises = new CPais();
    Console.Write("Digite o nome do pais: ");
    paises.setPais (Console.ReadLine());
    Console.Write("Digite o adimensão: ");
    paises.setDimensao(Convert.ToDouble(Console.ReadLine()));
    
    paises.InsereDados();//chama a função para insetir os paises que fazem fronteira
    
    arrayPaises.Add (paises);
    }
    
    CPais paises2 = new CPais();
    paises2.Exibe();
    //aqui deveria exibir só os paises inseridos dentro do arraylist dentro do arraylistp rincipal
    }

    segunda-feira, 1 de setembro de 2014 01:43

Respostas

  • Entendi,

     veja se esse bloco de código lhe ajuda :

      //array Pai
                ArrayList arrayPai = new ArrayList();
    
                //array Filho
                ArrayList filho = new ArrayList();
                filho.Add("UM");
                filho.Add("DOIS");
                filho.Add("TRES");
    
                //array de objetos
                object[] obj1 = new object[] {1, "DANIEL", filho};
    
    
                arrayPai.Add(obj1);
    
                //ler o array filho
                foreach (object item in arrayPai)
                {
                    foreach (var objetosNoArray in (object[])item)
                    {
                        if (objetosNoArray.GetType() == typeof(ArrayList))
                        {
                            foreach (object arrayList in (ArrayList)objetosNoArray)
                            {
                                MessageBox.Show(arrayList.ToString());
                            }
                        }
                    }
                }

    terça-feira, 2 de setembro de 2014 13:41

Todas as Respostas

  • Olá StardustRocker,

     existem vários modos de se fazer isso, como preenche seu array de array ?

    terça-feira, 2 de setembro de 2014 11:17
  • No caso do código que eu passei, eu tinha umarray de objetos e adicionava um arraylist na mesma posição dos outros itens pedidos.

    Tentei fazer várias modificações aqui depois e também não consegui o que queria.

    Tentei aqui adicionar esse array em um indice de um arraylist depois, de qualquer jeito, eu sempre acabo tendo um índice, com um elemento com outros índices dentro dele, sempre me retorna a mensagem System.Collection.ArrayList.

    no caso, eu consigo exibir o nome do país em uma função que recebe como parâmetro aquele meu array de objetos arrayPaises

    public void Exibe(CPais[]arrayAux) { for (int i = 0; i <aux.Length; i++)

    {

    Console.WriteLine("{0}, arrayAux.getPais());

    //aqui eu deveria imprimir apenas os países que fazem fronteira com esse país

    //não consegui fazer isso com um array normal de objetos e nem quando criei um outro arraylist

    //e adicionei esse array dentro do arraylist. Não consegui nem com for, nem com foreach.

    } }

    terça-feira, 2 de setembro de 2014 13:28
  • Entendi,

     veja se esse bloco de código lhe ajuda :

      //array Pai
                ArrayList arrayPai = new ArrayList();
    
                //array Filho
                ArrayList filho = new ArrayList();
                filho.Add("UM");
                filho.Add("DOIS");
                filho.Add("TRES");
    
                //array de objetos
                object[] obj1 = new object[] {1, "DANIEL", filho};
    
    
                arrayPai.Add(obj1);
    
                //ler o array filho
                foreach (object item in arrayPai)
                {
                    foreach (var objetosNoArray in (object[])item)
                    {
                        if (objetosNoArray.GetType() == typeof(ArrayList))
                        {
                            foreach (object arrayList in (ArrayList)objetosNoArray)
                            {
                                MessageBox.Show(arrayList.ToString());
                            }
                        }
                    }
                }

    terça-feira, 2 de setembro de 2014 13:41
  • Olá amigo, ainda não tive tempo de tentar implementar esse código ao meu. Mas pelo que entendi, ai vc tem dois ArraysList. Eu preciso armazenar tudo em um. No meu caso, para cada indice do meu array da Classe CPais, eu preciso ter o nome do pais, a dimensão e uma lista de paises que fazem fronteira.

    acho que vou tentar reescrever o meu código

    terça-feira, 2 de setembro de 2014 21:04
  • Não consegui incrementar esse código que me passaste de maneira a resolver meu problema!

    Tô postando novamente aqui o código, mais o enunciado do programa e o problema que estou encontrando

    Escreva uma classe que represente um país. Um país tem como atributos o seu
    nome, o nome da capital, sua dimensão em Km2 e uma lista de países com os
    quais ele faz fronteira. Represente a classe e forneça os seguintes construtores e
    método:
    a) Construtor que inicialize o nome, capital e a dimensão do país;
    b) Métodos de acesso (set/get) para as propriedades indicadas no item (a);
    c) Um método que permita verificar se dois países são iguais. Dois países são
    iguais se tiverem o mesmo nome e a mesma capital.
    d) Um método que define quais outros países fazem fronteira (note que um
    país não pode fazer fronteira com ele mesmo);
    e) Um método que retorne a lista de países que fazem fronteira;
    f) Um método que receba um outro país como parâmetro e retorne uma lista de
    vizinhos comuns aos dois países.

    preciso exibir os paises que fazem fronteira com determinado pais dentro da função Exibe()

    namespace Exer03
    {
        class CPais
        {
            private string sNome;
            private string sCapital;
            private double dDimensao;
            ArrayList arrPaisesFront;
    
    
            //construtor
            public CPais()
            {
                this.sNome = "";
                this.sCapital = "";
                this.dDimensao = 0.0;
                this.arrPaisesFront = new ArrayList();  
            }
    
            public void setNome(string nome)
            {
                this.sNome = nome;
            }
            public string getNome()
            {
                return this.sNome;
            }
            public void setCapital(string capital)
            {
                this.sCapital = capital;
            }
            public string getCapital()
            {
                return this.sCapital;
            }
            public void setDimensao(double dimensao)
            {
                this.dDimensao = dimensao;
            }
            public double getDimensao()
            {
                return this.dDimensao;
            }
            public void setPaisesFront(ArrayList aux)
            {
                this.arrPaisesFront = aux;
            }
            public ArrayList getpaisesFront ()
            {
                return this.arrPaisesFront;
            }
    
            public bool VerificaPaises(CPais[] arrayAux, string pais, string capital, ref bool baux)
            {
                for (int i = 0; i < arrayAux.Length; i++)
                {
                    if (arrayAux[i] == null) //quando o contator i estiver em uma seção do array ainda não preenchido, deverá pausar a verificação
                    {
                        baux = false;
                        break;
                    }
    
                    else if ((arrayAux[i].getNome() == pais) && (arrayAux[i].getCapital() == capital))
                    {
                        return true;
                    }
                }
    
                return false;
            }
    
            public ArrayList Fronteira(string pais)
            {
                ArrayList novo = new ArrayList();
                string sPaisVizinho = "";
                bool bAux = true;
                CPais aa = new CPais();
                do
                {
                    Console.Write("Digite os países que fazem fronteira com o {0}\nou digite 0 (ZERO) para sair: ", pais);
                    sPaisVizinho = Console.ReadLine();
    
                    if (pais == sPaisVizinho)
                    {
                        Console.WriteLine("Alerta! Um país não pode fazer fronteira com ele mesmo!\nDigite novamente");
                        bAux = false;
                    }
                    else
                    {
                        bAux = true;
                    }
    
                    if (bAux == true && sPaisVizinho != "0")
                    {
                        novo.Add(sPaisVizinho);
                    }
    
                } while (sPaisVizinho != "0");
    
                arrPaisesFront.Add(novo);
                setPaisesFront(novo);
                return novo;
               
            }
            
            public void Exibe(ArrayList auxPaises)
            {
               foreach (CPais item in auxPaises)
               {
                   Console.WriteLine("{0}", item.getNome());
                  
    //Exatamente aqui, eu precisaria exibir apenas os paises que fazem fronteira com exibido acima
                       foreach(CPais i in auxPaises)
                       {
                           Console.WriteLine("{0}", i.getpaisesFront());
                       }
                   
               }
            }
    
        }
    }
    
    //função principal do programa
    
    namespace Exer03
    {
        class Program
        {
            static void Main(string[] args)
            {
                ArrayList paiss = new ArrayList();
                CPais[] arrayPaises = new CPais[2];
    
                int j = 0;
                for (int i = 0; i < arrayPaises.Length; i++)
                {
                    CPais paises = new CPais();
                    bool bAux = true;
                    string snome = "";
                    string scapital = "";
    
                    do
                    {
                    Console.Write("\nDigite o nome do País: ");
                    snome = Console.ReadLine();
                    Console.Write("Digite a capital deste País: ");
                    scapital = Console.ReadLine();
    
                        //chama o método da classe CPais que verifica se dois países são iguais
                        if (paises.VerificaPaises(arrayPaises, snome, scapital, ref bAux) == true)
                        {
                            Console.WriteLine("Este já existe!\nDigite novamente!");    
                        }
    
                    } while (bAux != false);
    
                    paises.setNome(snome);
                    paises.setCapital(scapital);
                    Console.Write("Digite a área do País em KM²: ");
                    paises.setDimensao(Convert.ToDouble(Console.ReadLine()));
                    
                    paises.Fronteira(snome); //chama a função que adiciona os países vizinhos
                    
                    arrayPaises[i] = paises; //adiciona o objeto paises em um array de objetos para verificar países repetidos posteriormente
    
                    paiss.Insert(i, paises); //insere o objeto paises em um arraylist
                }
                
                CPais funcoes = new CPais();
    
                funcoes.Exibe(paiss); //chama a função para exibir os dados contidos no arraylist
                Console.ReadKey();
            }
        }
    }
    

    sábado, 6 de setembro de 2014 19:54