Adicionando elemento dentro de um array

como inserir um novo elemento dentro de um array

class Contato {

String [] contatos;

  void adicionar(String nome){

//contador
int k = 0;
for(int i=0; i < this.contatos.length; i++){
if(this.contatos[i] != null){
k += 1;
}

	}
         this.contatos[k] = nome;

???

}

mas só consigo adicionar um item , quando eu chamo o metodo adicionar novamente eu adiciono na primeira posição do array
como adicionar varios elementos sem usar ArrayList ?

Diferente de ArrayList, Arrays têm tamanho fixo. Não é possível adicionar um número de elementos maior que seu tamanho.

Você precisa definir o tamanho que deseja ao instanciá-lo. Por exemplo, 10.

String [] contatos = new String[10];

cara fiz isso é que esqueci de digitar na mensagem anterior
o correto é

package principal;

public class Contato {
	public String nome;
	String [] contatos = new String[10];
	
public static void main(String[] args) {
		 adicionar("Paulo");
                 listar();
	}

	public void adicionar(String nome){
		int k = -1;	
		for(int i=0; i < this.contatos.length; i++){
			if(this.contatos[i] != null){
				k += 1;
			}
		}
		this.contatos[k] = nome;
		}
	
	public void listar(){
		for(String s : this.contatos){
			System.out.println(s);
		}
	}
	
}

sabe como adicionar mais de um elemento:?

Seu código está meio confuso.

Mas por enquanto, apenas declare sua variável k como um atributo da classe, antes do método.

O problema é que sempre que chama o método adicionar você está atribuindo a ela o valor -1, fazendo o índice do array ser sempre o mesmo.

Entendeu?

1 curtida

[code]package principal;
/**
*

  • Classe Teste para criar uma simples agenda de contatos utilizando vetor , ou seja sem uso de Collection
  • e sem encapsulamento (get e set)
    */

public class Contato {
public String nome;
String[] contatos = new String[10];
int posicao;

public static void main(String[] args) {
	new Contato().adicionar("Teste");
	new Contato().listar();
}

public void adicionar(String nome) {
	
	for (int i = 0; i < this.contatos.length; i++) {
		if (this.contatos[i] != null) {
			this.posicao += 1;
		}
	}
	this.contatos[posicao] = nome;
}

public void listar() {
	for (String s : this.contatos) {
		System.out.println(s);
	}
}

}
[/code]

isso não resolve o problema! sabe como adiciono varios elementos até tamanho do vetor???

[code]package principal;
/**
*

  • Classe Teste para criar uma simples agenda de contatos utilizando vetor , ou seja sem uso de Collection
  • e sem encapsulamento (get e set)
    */

public class Contato {
public String nome;
String[] contatos = new String[10];
int posicao;

public static void main(String[] args) {
	new Contato().adicionar("Teste");
	new Contato().listar();
}

public void adicionar(String nome) {
	
	for (int i = 0; i < this.contatos.length; i++) {
		if (this.contatos[i] != null) {
			this.posicao += 1;
		}
	}
	this.contatos[posicao] = nome;
}

public void listar() {
	for (String s : this.contatos) {
		System.out.println(s);
	}
}

}
[/code]

entendi mais não resolveu né?

Crie só uma instância da sua classe Contato e adicione mais de uma vez no main.

Resolve sim.

Ou você quer adicionar “Teste” em todas as posições?

não é que uso uma classe Main com um metodo menu que tem um switch com opcao de inserir

e nela eu crio uma instancia de Contatos e adiciona a um vetor na classe contato e quando voltou ao menu com recursividade ele nao adiciona mais nada
somente adiciona um elemento entendeu???

quero adicionar nomes diferentes no vetor! o que consegui fazer até agora foi inserir na primeira posicao sabe como fazer ?

Caso esteja instanciando a classe Contato (dando um new) toda vez que volta com recursividade ele vai criar um objeto diferente toda vez.

Se estiver fazendo isso, mantenha uma instância da classe apenas.

Posta todo o seu código aí.

Cara pra adicionar vários é só fazer assim.

String [] contatos = new String[10]; contatos[0] = "Primeiro"; contatos[1] = "Segundo"; contatos[2] = "Terceiro"; ...

Simples assim. Posta todo seu código.

1 curtida

[code]package principal;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

	new Main().menu();
}

public void menu() {
	Scanner sc = new Scanner(System.in);
	System.out
			.println("Digite:\n[1] - INSERIR\n[2] - EXCLUIR\n[3] - EDITAR\n[4] - CONSULTAR\n[5] - LISTAR\n[0] - SAIR DO PROGRAMA");
	int opcao = new Integer(sc.nextLine());
	switch (opcao) {
	case 0:
		System.out.println("Fim do programa!");
		menu();
		break;
	case 1:
		Contato contato = new Contato();
		System.out.println("Digite o nome:");
		String nome = sc.nextLine();
		contato.adicionar(nome);
		contato.listar();
		System.out.println("Adicionado com Sucesso!");
		menu();
		break;

	default:
		System.out.println("Opção Inválida. Tente novamente!");
		menu();
		break;
	}
	sc.close();
}

}
[/code]

[code]package principal;
/**
*

  • Classe Teste para criar uma simples agenda de contatos utilizando vetor , ou seja sem uso de Collection
  • e sem encapsulamento (get e set)
    */

public class Contato {
public String nome;
String[] contatos = new String[10];
int posicao;

public void adicionar(String nome) {
	
	for (int i = 0; i < this.contatos.length; i++) {
		if (this.contatos[i] != null) {
			this.posicao += 1;
		}
	}
	this.contatos[posicao] = nome;
}

public void listar() {
	for (String s : this.contatos) {
		System.out.println(s);
	}
}

}
[/code]

Esse é o codigo até agora? consegui atribuir mais de um elemento sem usar ArrayList ou alguma Collection >>>???

Cara, pare de instanciar a classe Contato toda hora (rs).

Se você faz isso:

new Contato().adicionar("primeiro"); //aqui você criou uma instância da classe new Contato().adicionar("segundo"); //aqui outra, seu elemento não vai estar no mesmo array
Tente como está abaixo, colocando a classe Contato como um atributo, sendo instanciado só uma vez.

[code]package principal;

import java.util.Scanner;  
  
public class Main {  
  
    Contato contato = new Contato(); 

    public static void main(String[] args) {  
  
        new Main().menu();  
    }  
  
    public void menu() {  
        Scanner sc = new Scanner(System.in);  
        System.out  
                .println("Digite:\n[1] - INSERIR\n[2] - EXCLUIR\n[3] - EDITAR\n[4] - CONSULTAR\n[5] - LISTAR\n[0] - SAIR DO PROGRAMA");  
        int opcao = new Integer(sc.nextLine());  
        switch (opcao) {  
        case 0:  
            System.out.println("Fim do programa!");  
            menu();  
            break;  
        case 1:   
            System.out.println("Digite o nome:");  
            String nome = sc.nextLine();  
            contato.adicionar(nome);  
            contato.listar();  
            System.out.println("Adicionado com Sucesso!");  
            menu();  
            break;  
  
        default:  
            System.out.println("Opção Inválida. Tente novamente!");  
            menu();  
            break;  
        }  
        sc.close();  
    }  
} [/code]

Cara já está adicionando mais agora tenho outro problema se eu adiciono duas posições no vetor fica tudo bem mas quando coloco a terceira ele pula uma posicao e salva mais até aqui tá funcionando a logica

Ok, mas entendeu o problema anterior né? Próximo. :slight_smile:

Sua lógica está meio complexa na classe Contato, então vamos simplificar. Substitua ela por este código.

[code]public class Contato {

    String [] contatos = new String[10];  
    int count = 0; 
    
    public void adicionar(String nome){  
        if(count < (contatos.lenght-1)) {
            contatos[count++] = nome;      
        }                    
    }  
      
    public void listar(){  
        System.out.println(contatos);  
    }  

}[/code]

fredericomaia10

Valeu resolvi o outro problema. valeu pela dica!
ajudou muito [RESOLVIDO]

Opa, valeu! Bons estudos.

1 curtida