Argumentos de linha de comando

Pessoal, qual a resposta correta para a seguinte questão:

[code]public class CommandArgs
{
public static void main(String[] args)
{
String[][] argCopy = new String[2][2];

   int x;

   argCopy[0] = args;

   x = argCopy[0].length;

   for(int y = 0; y < x; y++)
       System.out.print(argCopy[0][y]); 

}
}[/code]

a chamada de linha de comando sendo:

java ComandArgs 1 2 3

qual será o resultado?

a. 0 0
b. 1 2
c. 0 0 0
d. 1 2 3
e. A compilação falhará
f. Uma exceção será lançada em tempo de execução

Fiquei na dúvida, quem puder responder e comentar o por que da resposta…

Em minha opinião, A reposta é a:
f. Uma exceção será lançada em tempo de execução
O programa está a tentar “passar” para a primeira linha de argCopy, que tem somente 2 colunas, um array de 3 elementos: 1 2 3 (argumentos de linha de comandos). Logo, sera gerada uma excepção ao tentar copiar o terceiro elemento (que “não cabe” em argCopy).
Penso que este será o resultado obtido. Mas não há nada como experimentar…

[quote=diego2005]Pessoal, qual a resposta correta para a seguinte questão:

[code]public class CommandArgs
{
public static void main(String[] args)
{
String[][] argCopy = new String[2][2];

   int x;

   argCopy[0] = args;

   x = argCopy[0].length;

   for(int y = 0; y < x; y++)
       System.out.print(argCopy[0][y]); 

}
}[/code]

a chamada de linha de comando sendo:

java ComandArgs 1 2 3

qual será o resultado?

a. 0 0
b. 1 2
c. 0 0 0
d. 1 2 3
e. A compilação falhará
f. Uma exceção será lançada em tempo de execução

Fiquei na dúvida, quem puder responder e comentar o por que da resposta…[/quote]

Me parece que é a opção D, porque o array pode ser atribuido a um outro de tamanho diferente, desde que seja do mesmo tipo. Correto?

Pois é, a resposta correta é a letra D, mas por que??? O que acontece quando atribuimos um array maior a um menor??? Eu també pensei que fosse a letra F.

Se alguém puder explicar…

Valeu.

A coisa é simples

Array - > [1] [2] [3]
Index -> [0] [1] [2]

O tamanho do array é [2] que contem 3 elementos
É so se ligar que um array começa do 0.

acho que é isto.:expressionless:

t+

Cara, posso estar muito enganado, mas se um array possui tamanho 2:

String[] teste = new String[2];

ele terá apenas 2 elementos:

teste[0] = “Programação”;
teste[1] = “Java”;

Vamos lá, o que acontece:

Você criou um array de arrays de Strings, com duas posições cada e aproveitou e já criou dois arrays de Strings com duas posições cada também.

Assim, argCopy[0] está referenciando um array de Strings com duas posições, enquanto argCopy[1] está referenciando outro array de Strings com duas posições. Mas o que a assinatura “String[][] argCopy” indica é que cada uma das duas posições de argCopy deve referenciar um array de Strings, não limita a quantidade. Ou seja, a linha:

Faz com que a primeira posição de argCopy referencie o array referenciado por args. A segunda continua referenciando o array de Strings com que argCopy foi inicializado, então:

imprimiria 2.

Da mesma forma, o seguinte código funcionaria numa boa:

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

Claro que, neste caso, argCopy[0] não referenciaria mais o mesmo array que args referencia, mas sim um array de Strings com 3 posições, com null em cada uma.

Capisce?

Opa…agora ficou bem mais claro, espero não errar mais questões desse tipo.

Valeu pela explicação…