Explaining the code:
// Nome do pacote.
package pct;
// Essa classe serve para ler dados a partir de uma entrada.
import java.util.Scanner;
// Todo o código está dentro de uma classe.
public class Exer5 {
// Dentro do método main, que é o método principal da aplicação (e o único neste caso).
public static void main(String[] args) {
// Cria um Scanner que lê entradas da entrada padrão (System.in).
// "teclado" não é a melhor definição disso, mas de qualquer forma,
// trata-se de um objeto que vai fornecer o que o usuário digitar.
Scanner teclado = new Scanner (System.in);
// Cria um array com 5 posições.
int[] vetor1 = new int[5];
// Seria mais fácil fazer assim: int tamanho = 5;
int tamanho = vetor1.length;
// Outro array com 5 posições.
int[] vetor2 = new int[tamanho];
// Executa 5 vezes, contando (com i): 0, 1, 2, 3 e 4.
for (int i = 0; i < 5; i++) {
// Pede para o usuário digitar algo.
System.out.println("Digite um número:");
// Lê o que ele digitou e põe no array.
vetor1[i] = teclado.nextInt();
}
// Neste ponto o array1 vai estar preenchido com os 5 valores digitados.
// Executa 5 vezes, contando (com i): 0, 1, 2, 3 e 4.
for (int i = 0; i < vetor1.length; i++) {
// A variável tamanho começa com 5.
// Quando i for 0, tamanho será 4.
// Quando i for 1, tamanho será 3.
// ...
// Quando i for 4, tamanho será 0.
// Observe que tamanho sempre será a "posição reversa" no array.
tamanho--;
// Coloca o elemento de um array na posição reversa do outro.
vetor2[i] = vetor1[tamanho];
}
// Deveria mostrar os valores invertidos. Mas vai dar errado!
System.out.println("Os valores invertidos, foram:" +vetor2);
}
}
The output at the end will look something like this:
Os valores invertidos, foram:[I@1540e19d
Let's improve this program:
package pct;
import java.util.Arrays;
import java.util.Scanner;
public class Exercicio5 {
public static void main(String[] args) {
int tamanhoVetor = 5;
Scanner scan = new Scanner(System.in);
int[] original = new int[tamanhoVetor];
int[] inverso = new int[tamanhoVetor];
for (int i = 0; i < tamanhoVetor; i++) {
System.out.println("Digite um número:");
original[i] = scan.nextInt();
}
for (int i = 0; i < tamanhoVetor; i++) {
inverso[i] = original[tamanhoVetor - 1 - i];
}
System.out.println("Os valores invertidos foram " + Arrays.toString(inverso));
}
}
The difference here is that I have renamed some variables and instead of counting the variable tamanho
backwards, I use this formula:
inverso[i] = original[tamanhoVetor - 1 - i];
Now, the first and last position of these two vectors are 0
and tamanhoVetor -
1
. Therefore, the tamanhoVetor - 1 - i
position will be the last position when i
is 0
, the penultimate when i
is 1
, the antepenultimate when i
is 2
, etc.
Arrays do not have method toString()
overwritten, and therefore in System.out.println
, the result is unintelligible and meaningless text. Using Arrays.toString(inverso)
, this problem is healed.
Finally, I set the size to only one place so I do not have tamanho
and 5
scattered in multiple places incoherently. Also, the size variable (which I called tamanhoVetor
not to confuse with the existing one) never changes so things do not get so confusing.
See here working on ideone (pay attention to the stdin
field there in ideone and compare to output).