Ajuda no código do exercício: Crie um algoritmo recursivo para imprimir os elementos de um array com N posições na ordem crescente

Estou com dificuldade nesse código. As linhas: 6, 30, 34 estão com erro. Já revirei o eclipse pra ajeitar e nada. Alguém me ajuda na resolução do meu código? No momento não estou conseguindo resolver o problema.

import java.util.Scanner;

public class exercício1 {
	Scanner sc = new Scanner(System.in);
	int x = 10;
	int i, j, temp;
	
	/* Leitura do Vetor */
	for (i = 0; i<10; i++){
		{
			System.out.println("Digite um numero:");
			i= sc.nextInt();
		}
		
		//ordenando o vetor
		for (i=0;i<10; i++)
			for(j=i+1;j<10;j++) {
				int[] x;
				
				if (x[i]>x[j]) {
					temp=x[i];
					x[i]=x[j];
					x[j]=temp;
				}
			}
	}
	
	public int ImprimirVetor(int x, int i) {
		/* Impressão do Vetor Ordenado */
		System.out.println("Vetor em ordem crescente: \n");
		
		for(i=0;i<10;i++)
			System.out.println(x[i]); 
			
		return 0;
	}
}

Então, a gente não consegue ver quais são as linhas 6 , 30 , 34. E quais erros estão acontecendo nessas linhas?

O seguinte erro no código: linha 6

linha 30:

linha 34:

Soh reparei agora. O seu código está direto na classe. Você deve criar um método e colocar seu código nele. Assim:

public class Exercicio1 {
    public static void main(String args[]) {
        // coloca seu código aqui dentro
    }
}

Update: Só não coloca o método ImprimirVetor.

Teoricamente está sem erros, a estética está boa ou precisa melhorar

Algumas considerações:

  • Nome de classe deve sempre começar com letra maiúscula e não pode conter caracteres especiais, como acentos. O correto seria: Exercicio1
  • No System.out onde vc imprime o texto: Digite um numero, não precisa dessas chaves extras. Remova elas.
  • Mantenha a identação. Eu prefiro que as chaves fique no final das linhas em vez de colocar no início, mas não tenho certeza se isso eh uma convenção ou não.
  • Comentário de linha, faça com // em vez de /* */. Use da forma como fez, se for para colocar um comentário com um texto maior com mais detalhes.
1 curtida

Ok, consegui implementar suas considerações, ficou dessa forma:


Depois do ultimo fechamento de chave eu posso colocar o método ImprimirVetor?

Linha 6: você criou a classe, mas a classe sozinha não aceita código. Precisa colocar isso num método.
Linha 30: o método que você construiu está fora da classe
Linha 34: x nãéo ã vetor, logo, no dá para acessar a iésima posição dele.

import java.util.Scanner;

public class Exercicio1 {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int tamanho = 5;
		int[] numeros = new int[tamanho];
		
		// Leitura
		for (int i = 0; i < tamanho; i++) {
			System.out.printf("Digite um numero (%d/%d): ", (i+1), tamanho);
			numeros[i] = sc.nextInt();
		}
		
		// Ordenação
		int temp;
		for(int i = 0; i < tamanho; i++) {
			for(int j = i + 1; j < tamanho; j++) {
				if (numeros[i] > numeros[j]) {
					temp = numeros[i];
					numeros[i] = numeros[j];
					numeros[j] = temp;
				}
			}
		}
		
		imprimir(numeros);
		
		sc.close();
	}
	
	/**
	 * Imprime o vetor de números no console
	 */
	private static void imprimir(int[] numeros) {
		System.out.println("\nVetor em ordem crescente: ");
		
		for(int i = 0;  i < numeros.length; i++) {
			System.out.println("- " + numeros[i]);
		}
	}
}

Muito obrigado por me ajudar a melhorar o código!

Dê uma olhada nele, e, se alguma parte do código não estiver claro, pode perguntar.

Me explica a parte da ordenação, fiquei perdido

if (numeros[i] > numeros[j]) {
	temp = numeros[i];
	numeros[i] = numeros[j];
	numeros[j] = temp;
}

Esse algoritmo, faz a troca dos valores entre as posições, caso o primeiro valor (numeros[i]) seja maior do que o segundo valor (numeros[j]), pq j é igual a i + 1, então o valor da posição i será trocado com o valor da posição j, utilizando a variável temp para armazenar o valor temporariamento (para não perder o valor antes que a troca seja realizada)

Pense nesse array (vetor):

           0   1   2   3   4    <- posições do array
vetor -> [ 5 , 4 , 8 , 1 , 9 ]
           i   j

Nesse array, quando o algoritmo for executado, o valor de i e j será trocado, pois 5 é maior do que 4. E esse ciclo se repete até o final do array, fazendo a ordenação sempre seguindo a mesma lógica.

Ok obrigado, consegui entender melhor agora.

Qualquer coisa, soh perguntar.

Não se esqueça de marcar a resposta que te ajudou como Solução

1 curtida