2
respostas

uso do new para popular um array e modificar atributos.

Professor, estou fazendo um exercício para criação de uma lista de tarefas. Decidi empregar o que aprendi e resolver o exercício com o que vi até agora de OO. No comando inicial do exercício ele diz que o programa deverá ter comandos como "adicionar" nova tarefa, "listar" tarefas e "concluir" tarefa. Daí eu decidi criar uma Classe Tarefa para criar os atributos e métodos que utilizarei. A Classe ficou conforme abaixo:

public class Tarefa {
    private String descricao;
    private int realizacao = 0;


    public Tarefa(String descricao, int realizacao){
        this.descricao = descricao;
        this.realizacao = realizacao;
    }
    
    public String getDescricao(){
        return descricao;
    }

    public int getRealizacao(){
        return realizacao;
    }

}

E tentei imaginar que o meu main deverá, antes de cadastrar uma nova tarefa, conferir de há espaço no array e pegar o primeiro espaço vazio e cadastrar a nova tarefa. Mas agora parece que eu congelei, não sei mais o que fazer para criar um new para popular o array e depois como é que farei para o usuário poder alterar uma tarefa para "realização" igual a 100%, ou seja, concluída.

o main ficou assim:

public class Main {
    public static void main(String[] args) {
        int firstEmptyPlace = 0;

        Tarefa[] tarefas = new Tarefa[3];

        int firstEmptyPlace = 0;
        for(int i = 0; i < tarefas.length; i++){
            if (tarefas[i] == null)
            {
                firstEmptyPlace = i;
                break;
            }
        }
    }
}

Poderiam me ajudar? Desde já agradeço imensamente.

2 respostas

Olá, Henrique!

Não sei se entendi muito bem a sua dúvida mas espero conseguir te ajudar. No momento que você tem a próxima posição vazia, você pode instanciar um novo objeto da classe Tarefa naquela posição do array:

Tarefa tarefa = new Tarefa(...);

tarefas[firstEmptyPlace]= tarefa;

Dessa forma, a posição firstEmptyPlace será ocupada pelo novo objeto criado.

Para alterar uma tarefa, considerando que você tem apenas a descrição dela, será preciso percorrer todo o array (com um for) para encontrar a tarefa com aquela descrição e alterar o atributo realizacao. Para isso, você precisará criar um método setRealização.

Espero que possa ter te ajudado, qualquer coisa, só mandar aqui!

Caramba, já me deu uma clareada excelente.

Consegui fazer para gerar uma tarefa. Se eu puder contar com sua ajuda só mais um pouquinho eu agradecerei muito. O que pretendo fazer agora é fazer um loop para ele pegar as tarefas do usuário e seus respectivos percentuais de realização, só que o for rodará 10 vezes, pegará dez tarefas. Como poderei consultar estas tarefas? como faço para ele ir armazenando isto no array e eu poder consultar estas tarefas depois que o código parar de rodar, pois precisarei disponibilizar o método consulta tarefas e altera tarefas para o usuário alterar o status das tarefas. Vou posta abaixo como está o meu código.

public class Main {
    public static void main(String[] args) {
        int firstEmptyPlace = 0;

        String task;
        int realizado = 0;

        Tarefa[] tarefas = new Tarefa[3];

        //int firstEmptyPlace;
        for(int i = 0; i < tarefas.length; i++){
            if (tarefas[i] == null)
            {
                firstEmptyPlace = i;
                break;
            }
        }

        task = JOptionPane.showInputDialog("Tarefa a ser inserida: ");

        realizado = Integer.parseInt(JOptionPane.showInputDialog("Qual o percentual de realização da tarefa?"));

        tarefas[firstEmptyPlace] = new Tarefa(task, realizado);

        System.out.println(tarefas[0].getDescricao());
        System.out.println(tarefas[0].getRealizacao());

    }
public class Tarefa {
    private String descricao;
    private int realizacao = 0;


    public Tarefa(String descricao, int realizacao){
        this.descricao = descricao;
        this.realizacao = realizacao;
    }

    public String getDescricao(){
        return descricao;
    }

    public int getRealizacao(){
        return realizacao;
    }

}

Pensei que a saída poderia ser ir salvando em um arquivo TXT, mas não sei como fazer. Haveria alguma solução melhor? Desde já muito obrigado pela ajuda.