Problema com Array

17 respostas
Jarf

Olá amigos, alguem poderia me ajudar na criação de um array onde uma pessoa consiga inserir nome e telefone?
Exemplo: Criar dois arrays com 10 posiçoes para cada e a inserção de nome e telefone ser feita como se fosse por um “usuário”.

Eu sei que tem um comando que se não me engano é Scanner sc = new Scanner (System.in);
Mas não sei como fazer isso juntamente com o Array.

Agradeço a ajuda.

abraço!!!

17 Respostas

B

Crie uma classe usuário com nome e telefone como atributos, depois crie um array de usuário. Use o scanner para ler duas strings do teclado, atribua essas strings em nome e telefone, e crie um usuário com esses dois atributos, passando as strings como parâmetro. Finalmente inclua o objeto usuário recem-criado no array.

Jarf

Não entendi muito bem, mas vou tentar da meu jeito aqui ;/
De qualquer forma, obrigado pela ajuda.

Jarf

Se alguem puder me ajudar de uma outra forma eu agradeço.

B

Um exemplo executável de Usuario.java

import java.util.Scanner;

public class Usuario {

    private String nome;
    private String telefone;

    public Usuario(String nome, String telefone) {
        this.nome = nome;
        this.telefone = telefone;
    }

    @Override
    public String toString() {
        return nome + ": " + telefone;
    }

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        System.out.println("Quantas entradas?");
        int tamanho = Integer.parseInt(in.next());

        Usuario[] usuarios = new Usuario[tamanho];

        for (int i = 0; i < usuarios.length; i++) {
            System.out.printf("%1dª pessoa:\n", i + 1);
            System.out.print("Nome: ");
            String nome = in.next();

            System.out.print("Telefone: ");
            String telefone = in.next();

            Usuario usuario = new Usuario(nome, telefone);

            usuarios[i] = usuario;
        }

        System.out.println("\nOs usuários cadastrados são:");
        for (Usuario usuario : usuarios) {
            System.out.println(usuario);
        }
    }
}
Jarf
Rodou direitinho o Exemplo Bruno. Mto obrigado, ajudou bastante :wink: Só to tentando fazer agora tratando uma exceção e com while, ai fiz da seguinte forma:
public class Usuario {
	
				
		 	private String nome;   
		    private String telefone;   
		  
		    public Usuario(String nome, String telefone) {   
		        this.nome = nome;   
		        this.telefone = telefone;   
		    }   
		  
		    @Override   
		    public String toString() {   
		        return nome + " : " + telefone;   
		    }   
		  
		    public static void main(String[] args) {   
		  
		    try{
		        Scanner in = new Scanner(System.in);   
		        		  
		        Usuario[] usuarios = new Usuario[3];   
		  
		        while (true) {   
		               
		            System.out.print("Nome: ");   
		            String nome = in.next();
		            if (nome.equalsIgnoreCase("Fim"));
		            break;
		  
		            System.out.print("Telefone: ");   
		            String telefone = in.next();   
		  
		            Usuario usuario = new Usuario(nome, telefone);
		       		            
		        
		        } 
		        
		        for (int i=0 ; i<usuarios.length; i++) {   
		            System.out.println("Nomes digitados \n" + usuarios);
		        }
		    }
		    catch(ArrayIndexOutOfBoundsException e) {
		    	System.out.println("Vetor Cheio!");
		    	
		    }
		    
		         
	}   
		
}
Só que está dando erro na seguinte linha:
System.out.print("Telefone: ");

Alguem sabe me dizer pq?
Agradeço ajuda!!!

Vini_Fernandes

Cara, tenho certeza que esta dando uma excecao do tipo “unreachable”. Veja a correcao:

if (nome.equalsIgnoreCase("Fim"));   //aqui tem um ponto e virgula e deve ser retirado
break;

deve ser assim:

if (nome.equalsIgnoreCase("Fim"))   
break;

ate

B

Jarf:
Rodou direitinho o Exemplo Bruno. Mto obrigado, ajudou bastante :wink:
Só to tentando fazer agora tratando uma exceção e com while, ai fiz da seguinte forma:

Só um aviso, não trate exceções dessa forma, você pode muito bem evitá-la mudando a condição de parada do while.

Jarf

Vlw pela ajuda de vcs amigos :wink:
Mas pq ele não esta tratando a Exceção? Ele fica registrando nome o Tempo todo e qndo digito Fim da o seguinte erro:

Nome: fim Nomes digitados [Lexercicio.Usuario;@186d4c1 Nomes digitados [Lexercicio.Usuario;@186d4c1 Nomes digitados [Lexercicio.Usuario;@186d4c1

O que eu fiz de errado?
Alguem pode me ajudar?
Obrigado!!

Vini_Fernandes

Cara, seu codigo deve funcionar dessa maneira:

import java.util.*;
public class Usuario {   
       
                   
            private String nome;     
            private String telefone;     
             
            public Usuario(String nome, String telefone) {     
                this.nome = nome;     
                this.telefone = telefone;     
            }     
             
            @Override     
            public String toString() {     
                return nome + " : " + telefone;     
            }     
             
            public static void main(String[] args) {     
             
            try{   
                Scanner in = new Scanner(System.in);     
                             
                //Usuario[] usuarios = new Usuario[3];     
                  List<Usuario> usuarios = new ArrayList<Usuario> ();             
                System.out.println("Caso queira sair digite FIM ou qualquer tecla para INICIAR: ");     
				while (! in.next().equalsIgnoreCase("Fim")) {     
                         
                    System.out.print("Nome: ");     
                    String nome = in.next();   

                    System.out.print("Telefone: ");     
                    String telefone = in.next();     
             
                    usuarios.add(new Usuario(nome, telefone));   
                                   
                    System.out.println("Caso queira sair digite FIM: ");     
                }   
                   
                for (Usuario usuario : usuarios) {     
                    System.out.println("Nomes digitados \n" + usuario);   
                }   
            }   
            catch(Exception e) {   
                e.printStackTrace();                   
            }   
               
                   
    }     
           
}

Sei que utilizei alguns recursos que voce nao conhece, mas vamos la: trabalhamos com implementacaoes da interface List sempre quando queremos uma lista de obejetos que pode crescer indefinidamente, com objetos “repetidos” ou nao, como queira! Considero uma má pratica a condicao while(true) como voce fez, pois nao tem necessidade de entrar no loop se a condicao nao for satisfeita e com “true” voce sempre entra no laço!

Ate

Jarf

Entendi Vini.
Mas a intenção eh essa mesmo, eh de ficar no loop e so poder adicionar no maximo 3 pessoas e qndo colocar +, cair na execeção e trata-la mostrando Vetor Cheio!
Por isso estou fazendo dessa forma, entendeu? :wink:

Vini_Fernandes

Entao voce tem que se preocupar na inclusao de mais de 3 pessoas! Inclua um contador para verificar se count <= usuarios.length.
Ate

Jarf

Mas se eu fizer um contador, ele vai parar por causa do contador, e não por ter dado um erro de exceder a quantidade que o array tem, não eh isso? Ou estou errado? =/

Vini_Fernandes

Era só mais uma forma de voce evitar o try/catch, mas como é necessario para seu problema entao deixe pra lá!!!
Abracao

Jarf

Pois é, eu preciso fazer com esse while(true) tosco e com tratamento de exceção :frowning:
Mas valeu pelas dicas.

Se alguem puder me ajudar eu agradeço!!
abraços!!

Vini_Fernandes

Pra finalizar o seu problema, veja o qu esta faltando em seu codigo (e desta vez nao mudei nada…rsrs):

public static void main(String[] args) {     
             
            try{   
                Scanner in = new Scanner(System.in);     
                             
                Usuario[] usuarios = new Usuario[3];     
                int k =0;//voce vai ter que incluir esse cara para incluir o novos usuario no array

                while (true) {     
                    System.out.print("Nome: ");     
                    String nome = in.next();   
                    if (nome.equalsIgnoreCase("Fim"))
                    break;   
             
                    System.out.print("Telefone: ");  
                    String telefone = in.next();     
             
                    Usuario usuario = new Usuario(nome, telefone);   
                    usuarios[k] = usuario;//aqui voce utiliza o inteiro para incluir o novo usuario no array
                     k++;
                   
                }   
                   
                for (int i=0 ; i<usuarios.length; i++) {     
                    System.out.println("Nomes digitados \n" + usuarios[i]);   //aqui vc se esquece que deve exibir os elementos do arrays ao invez do array em si
                }   
            }   
            catch(ArrayIndexOutOfBoundsException e) {   
                System.out.println("Vetor Cheio!");   
                   
            }   
               
                   
    }

Funcionou legal!!!

abracao

Jarf

Ahh ta… entendi.
Mas agora não está funcionando o tratamento da exceção…
Esta adicionando varios e nom da erro qndo adiciona + de 3 :?
Vlw pela ajuda!!

Se alguem pudr me ajudar nessa exceção, eu acradeço.
abraços!!

Vini_Fernandes

Cara, esta tudo funcionando sim, inclusive o tratamento de excecao, porem a forma com que voce trata sua excecao é apenas emitir uma mensagem “Vetor cheio” para o sistema e nao faz mais nada!

Ate

Criado 11 de fevereiro de 2009
Ultima resposta 13 de fev. de 2009
Respostas 17
Participantes 3