[RESOLVIDO] Problema com array em Java

Olá pessoal, gostaria de uma ajuda neste exercício de array:
Leia um vetor de 40 posições e acumule os valores do primeiro elemento no segundo, deste no terceiro e assim por diante. Ao final, escreva o vetor obtido

O que que eu tentei até agora(detalhe: não compila, acontece ArrayIndexOutOfBounds):

public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	int vetor[]=new int[10];
	for(int i=0;i<=10;i++) {
		int aux=i+i;
		vetor[aux]=vetor[i];

	}
	for(int i=0;i<=10;i++) {
		System.out.println(vetor[i]);
	}
}

Está lançando o erro ArrayIndexOutOfBounds que significa: “Índice do Array Fora do Limite”, ou seja, se o vetor tem tamanho 10, o índice está indo até 11, por exemplo. De fato, de 0 a 9 são dez posições, mas no for você está indicando que o intervalo é de 0 a 10 = 11 posições:

O correto é: for(int i = 0; i < 10; i++)
Também há problema semelhante aqui:

Quando i = 9, então aux será igual a 18, já que i + i (9 + 9) = 18 e 18 > 10;

Quanto valores uma posição de um vetor inteiro pode conter? Esse problema/exercício tem um erro de semântica (do ponto de vista da gramática). Em vez de acumular, o termo correto seria trocar, já que acumular significa amontoar, ajuntar, concentrar. Se esse fosse o caso, o resultado seria um único número (e não um outro vetor) ou um vetor menor.

Creio que o que deveria ser impresso é o mesmo vetor, porém com o número que estava na posição 0 na posição 1, o que estava na posição 1, na posição 2 e assim por diante.

Obrigado pela resposta amigo, ajudou a resolver o bug, porém ainda não consegui solucionar esse problema do programa de arrumar as posições.

E o que o vai na posição 0? Eu achei esse exercício muito confuso no seu enunciado. Bom, talvez alguém tenha uma opinião diversa da minha.

O que vai na posição 0 é o número que foi colocado na posição 40. Só não sei como fazer isso…

Deve haver formas melhores de resolver isso, mas pensei assim:

Vamos trabalhar com testes de mesa, em que por motivos de comodidade, o vetor tenha somente 5 posições:

vetor = {1, 2, 3, 4, 5}

e tenhamos duas variáveis auxiliares:
v1 e v2 e
um incrementador de índice:
indice:

Então:

 indice = 1;

 1, 2, 3, 4, 5
 
 v2 = vetor[indice];				//v2 = 2
 vetor[indice++] = vetor[i];		//vetor[1] = 1
 v1 = v2;							//v1 = 2
 
 1, 1, 3, 4, 5
 
 v2 = vetor[indice];				//v2 = 3
 vetor[indice++] =  v1;				//vetor[2] = 2
 v1 = v2;							//v1 = 3
 
 1, 1, 2, 4, 5
 
 v2 = vetor[indice]					//v2 = 4
 vetor[indice++] = v1;				//vetor[3] = 3
 v1 = v2;							//v1 = 4
 
 1, 1, 2, 3, 5
 
 if(indice == (vetor.length - 1))
 v2 = vetor[indice]						//v2 = 5
 vetor[0] = v2;							//vetor[0] = 5
 
 
 5, 1, 2, 3, 4

Com base nesse teste:

import java.util.Scanner;

public class Trocador {
	public static void main(String[] args){
		int v1 = 0;
		int v2 = 0;
		int indice = 1;
		int[] vetor = new int[40];
		Scanner leitor = new Scanner(System.in);
		
		for(int i = 0; i < vetor.length; i++){
			System.out.print("Vetor[" + i + "]= ");
			vetor[i] = leitor.nextInt();
		}
		
		System.out.println("\nVetor lido: ");
		for(int i = 0; i < vetor.length; i++){
			if(i % 10 == 0)
				System.out.println("");
			System.out.print(vetor[i] + " ");
		}
		
		for(int i = 0; i < vetor.length; i++){
			if(indice < vetor.length){
				if(i == 0){
					v2 = vetor[indice];
					vetor[indice++] = vetor[i];
					v1 = v2;
					
				}else{
					v2 = vetor[indice];
					vetor[indice++] = v1;
					v1 = v2;
				}
				
				if(indice == (vetor.length - 1)){
					v2 = vetor[indice];
					vetor[0] = v2;
				}
			}
		}
		
		System.out.println("\n\nVetor trocado: ");
		for(int i = 0; i < vetor.length; i++){
			if(i % 10 == 0)
				System.out.println("");
			System.out.print(vetor[i] + " ");
		}
	}
}

Rodando…

image

1 curtida

Essa é a resposta exata!!
Muito obrigado amigo, ajudou demais, sério.

Bom dia! Como faço essa questão em c?