Ir para conteúdo
Fórum Script Brasil
  • 0

Problema em algoritmo com vetor unidimensional


João Pedro Balceiro

Pergunta

Estou fazendo um algoritmo pra uma atividade da faculdade mas está dando um erro o qual não consigo solucionar. O objetivo do exercício é entrar um valor que seria a dimensão do vetor e uma quantidade de nomes igual ao valor do vetor e, após isso, ter como saída os nomes na ordem contrária a que foi entrada.

O código que eu fiz foi esse:

import java.util.Scanner;
public class S05A12E2 {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        int n, i;
        
        System.out.print("Digite a quantidade de nomes: ");
        n = scan.nextInt();
        
        String nomes[] = new String[n];
        
        System.out.print("Digite os nomes: ");
    
        for (i=0;i<n;i=i+1){
            
            
            nomes = scan.nextLine();
           
                    
        } 
        
        i=n;
                
        while(i>=0) {
            
            System.out.print(nomes);
            i=i-1;
            
        }
    }
}

 

o programa lê apenas n-1 nomes e dá erro logo após, com a mensagem: 

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
    at s05a12e2.S05A12E2.main(S05A12E2.java:28)
C:\Users\balce\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
FALHA NA CONSTRUÇÃO (tempo total: 5 segundos)

Se alguém souber o que eu fiz de errado, agradeço a atenção desde já! Segue os prints da tela:

image.thumb.png.cd58d3b58152043cef02003eb3a05387.png

image.thumb.png.8a472dcf7aa5666a8b00370d51e079c1.png

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Olá @João Pedro Balceiro. Experimenta mudar essa linha para isso:

i = n - 1; // n - 1

while ...

Só fazendo isso aqui resolveu o problema

Só uma dica: Para imprimir os nomes no final sugiro algo assim:

System.out.print(nomes[i] + " ");

Só que a questão de como os nomes estão sendo lidos pode dar erro pela questão da sujeira no buffer do teclado

Até para evitar isso recomendo usar esse método para fazer a leitura dos nomes digitados:

public static String readString() {
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    try {
        return reader.readLine();
    } catch (IOException e) {
        throw new RuntimeException("Erro ao ler do teclado");
    }
}

E aí fazer uso do mesmo assim:

System.out.print("Digite os nomes: ");

for (i = 0; i < n; i++) {
    nomes[i] = readString();
}

Se tiver dúvidas fique a vontade para perguntar! 

Editado por Visitante
Atualizar comentário e código
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...