Duvida: Trabalhando com Arrays

5 respostas
gulira

Pessoal, estava eu aqui estudando para o SCJP e quando me deparei com uma duvida sobre arrays em um exercicio do livro da Kathy Sierra:

Olhem o Codigo:

.....
        String [][] argCopy = new String[3][5];        
        int x;
        String [] test = new String[] {"1","2","3","4"};
        String [] test1 = new String[] {"1","2"};        
        
        argCopy[0] = args;
        
        argCopy[1] = test;
        
        argCopy[2] = test1;
        
        x = argCopy[1].length;
        for(int y = 0; y <x;y++){
            System.out.print("Resultado:"+argCopy[1][y]);
        }
...

A duvida e o seguinte, eu não preciso indicar o tamanho do segundo nível de array em argCopy com
new String[3][5]“ ???

Porque mesmo indicando não vale para nada, porque os tamanhos dos arrays do segundo nível vão se modificarem e terem dimensões diferentes a medida que vou referenciando a outros arrays unidirecionais com dimensões diferentes assim como no exemplo teste e teste1 !!!

Bom, não sei se fui em claro na minha duvida. Mas gostaria de alguma resposta…

Desde já agradeço.>

5 Respostas

akumaldo

Não entendi o que você quer saber…Por que na declaração da Array de String você está indicando o tamanho da segunda dimensão…não estou vendo nada de errado no código! :shock:

gulira

akumaldo:
gulira:

A duvida e o seguinte, eu não preciso indicar o tamanho do segundo nível de array em argCopy com
new String[3][5]“ ???

Não entendi o que você quer saber…Por que na declaração da Array de String você está indicando o tamanho da segunda dimensão…não estou vendo nada de errado no código! :shock:

Então, realmente não esta errado. Más porque declarar como tamanho 5, se isto não faz efeito nenhum, pois posso trabalhar com arrays dimensoes diferentes, como no caso dos arrays teste e teste1.

String [][] argCopy = new String[3][5];        

         String [] test = new String[] {"1","2","3","4"};
         String [] test1 = new String[] {"1","2"};        
         
         argCopy[1] = test;
         
         argCopy[2] = test1;

como tambem poderia ser assim

String [][] argCopy = new String[3][];        

         String [] test = new String[] {"1","2","3","4"};
         String [] test1 = new String[] {"1","2"};        
         
         argCopy[1] = test;
         
         argCopy[2] = test1;

concluindo: em que muda ser declarado e instanciado o array

String [][] argCopy = new String[3][5];

como tambem

String [][] argCopy = new String[3][];
akumaldo

Ah…entendi…você quer saber por que foi declarado o array com a segunda dimensão em 5, sendo que você não viu ultilização???até ai não sei, realmente o array poderia ser declarado da segunda maneira que você declarou, e então ser populado pelos array undimensionais de string, você poderia sim deixar sem o tamanho da segunda dimensão e esperar os String[] popular… :slight_smile:

T

O seguinte programa mostra a diferença entre a declaração "new String[3][5]" e "new String[3][]".

class TesteString {
    private static void imprimeArray (String[][] arr) {
        if (arr != null) {
            for (int i = 0; i < arr.length; ++i) {
                System.out.print ("Linha " + i + ": ");
                if (arr[i] != null) {
                    for (int j = 0; j < arr[i].length; ++j) {
                        System.out.print (arr[i][j] + "  ");
                    }
                    System.out.println();
                } else {
                    System.out.println ("null");
                }
            } 
        } else {
            System.out.println ("Array: null");
        }
    }
    public static void main(String[] args) {
        // Esta declaraçao:
        String[][] array3por5 = new String[3][5];
        // equivale ao seguinte conjunto de declaraçoes e expressoes:
        String[][] arrayXpor5 = new String[3][];
        for (int i = 0; i < 3; i++) {
            arrayXpor5[i] = new String[5];
        }
        // Só para comprovar:
        System.out.println ("-- Array declarado como new String[3][5] --");
        imprimeArray (array3por5);
        System.out.println ("-- Array declarado como new String[3][] e inicializado com new String[5] --");
        imprimeArray (arrayXpor5);
    }
}
akumaldo

thingol:
O seguinte programa mostra a diferença entre a declaração "new String[3][5]" e "new String[3][]".

class TesteString { private static void imprimeArray (String[][] arr) { if (arr != null) { for (int i = 0; i < arr.length; ++i) { System.out.print ("Linha " + i + ": "); if (arr[i] != null) { for (int j = 0; j < arr[i].length; ++j) { System.out.print (arr[i][j] + " "); } System.out.println(); } else { System.out.println ("null"); } } } else { System.out.println ("Array: null"); } } public static void main(String[] args) { // Esta declaraçao: String[][] array3por5 = new String[3][5]; // equivale ao seguinte conjunto de declaraçoes e expressoes: String[][] arrayXpor5 = new String[3][]; for (int i = 0; i < 3; i++) { arrayXpor5[i] = new String[5]; } // Só para comprovar: System.out.println ("-- Array declarado como new String[3][5] --"); imprimeArray (array3por5); System.out.println ("-- Array declarado como new String[3][] e inicializado com new String[5] --"); imprimeArray (arrayXpor5); } }

Sim entendi thingol, mas no caso com array[x][] você deixa a segunda dimensão “livre”, a dimensão das colunas fica “livre” para você declarar posteriormente da maneira que você precisar, ficando mais flexivel não é?

Criado 26 de junho de 2006
Ultima resposta 27 de jun. de 2006
Respostas 5
Participantes 3