Get e set retornando null

boa noite, estou com batendo cabeça com a seguinte questão:

public String getNomeTarefa(){
return nomeTarefa;
}

public void setNomeTarefa(String nome1){
    this.nomeTarefa = nomeTarefa;
}

estes são os métodos construtores de uma propriedade privada da minha classe.

depois de instanciado o objeto, precisava adicionar esse item a uma lista, então criei a lista e fiz a seguinte linha:
tarefa.setNomeTarefa(nome);

ou seja, eu passei um parâmetro pra essa propriedade privada usando o set, porém quando vou imprimir no console usando o get, o valor retornado é null, sendo que todas as outras propriedades retornam o valor correto, será que podem me ajudar? peço desculpas se não ficou explicativo o suficiente, sou novo em java e estou começando a aprender sobre poo

Não são construtores, são apenas métodos.

Posta o código completo e exemplo de como está utilizando.

isso, perdão, as vezes acabo confundindo, no momento estou no trabalho e não tem como mandar o código

mas o que eu tô tentando fazer é um aplicativo simples de lista de tarefas

as propriedades das tarefas devem ser privadas (nome, descrição e prazo)

nessa minha situação, eu instanciei, passei os parâmetros nome, descrição e prazo através do set, adicionei ao arraylist e estava tentando imprimir usando foreach

mas ao pedir pra imprimir usando o get, o valor retornado é null

acho que ficou um pouco confuso, mas quando eu estiver em casa a noite, eu mostro o código completo

Quando puder, passa o código das classes envolvidas, provavelmente está manipulando instâncias diferentes

já peço logo desculpas pelo código sujo, estou realmente bem no inicio, então meu código ainda ta bem poluído e eu ainda estou desenvolvendo ele, então ainda tem bastante coisa pra resolver

essa é minha classe

public class Tarefa {


private String nomeTarefa;
private String dataLimite;
private String descricao;

public String getNomeTarefa(){
    return nomeTarefa;
}

public void setNomeTarefa(String nome){
    this.nomeTarefa = nomeTarefa;
}

public String getDataLimite() {
    return dataLimite;
}

public void setDataLimite(String dataLimite) {
    this.dataLimite = dataLimite;
}

public String getDescricao() {
    return descricao;
}

public void setDescricao(String descricao) {
    this.descricao = descricao;
}

}

esse é meu “programa”

package br.com.cdb.java.exercicios;

import java.util.ArrayList;
import java.util.Scanner;

public class TarefaApp {
static ArrayList<Tarefa> ListaDeTarefas = new ArrayList<>();
Tarefa tarefa = new Tarefa();

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    ArrayList<Tarefa> listaDeTarefas = new ArrayList<>();
    Tarefa tarefa = new Tarefa();

    int condicao = 0;
    while (condicao != 6) {
        System.out.println("Olá, seja muito bem vindo! " +
                "Digite o número da ação que deseja realizar:\n" +
                "1 - Adicionar tarefa \n" +
                "2 - Remover tarefa\n" +
                "3 - Listar tarefas\n" +
                "4 - Listar em ordem alfabética\n" +
                "5 - Listar em ordem cronológica\n" +
                "6 - Sair");
        condicao = input.nextInt();
        switch (condicao) {
            case 1:

                input = new Scanner (System.in);
                System.out.println("Insira o nome da nova tarefa:");
                String nome = input.nextLine();
                System.out.println("Crie uma descrição para esta tarefa:");
                String descricao = input.nextLine();
                System.out.println("Defina o prazo para a realização desta tarefa: (dd/mm/aaaa)");
                String prazo = input.nextLine();
                System.out.println("Tarefa adicionada com sucesso!");

                tarefa.setNomeTarefa(nome);
                tarefa.setDescricao(descricao);
                tarefa.setDataLimite(prazo);

                listaDeTarefas.add(tarefa);

                break;
            case 2:
                System.out.println("Você selecionou a opção 2.");
                break;
            case 3:
                for (Tarefa tarefa1 : listaDeTarefas){
                    System.out.println(tarefa1.getNomeTarefa()+"-"+tarefa1.getDescricao()+"- "+tarefa1.getDataLimite());
                }
                break;
            case 4:
                System.out.println("Você selecionou a opção 4.");
                break;
            case 5:
                System.out.println("Você selecionou a opção 5.");
                break;

        }
    }
}

}

depois de adicionar as tarefas, quando tento listar, é listado corretamente a descrição e o prazo, porém no lugar do nome está retornando um valor null

  1. Tu estás a criar uma lista de tarefas com várias repetições da mesma tarefa. Cada tarefa “nova” necessita de um “new”, caso contrário vais ter output repetido para todas (podes verificar isso inserindo duas tarefas e listando)

  2. A ler do teclado não deves misturar nextLine com nenhum dos outros métodos (nextInt p ex). Isto é o motivo para o teu nome estar vazio. Como tu no nextInt escreveste um numero e clicaste em enter, o nextInt leu o numero mas o enter nao foi lido. Ao chegar ao nextLine seguinte, le o enter e ficas com a string vazia. Muda o teu codigo para ler sempre com nextLine e faz o Integer.parseInt quando necessitas de um inteiro.

obrigado amigo, o primeiro po to eu já corrigi, está da seguinte forma agora:

input = new Scanner (System.in);
                System.out.println("Insira o nome da nova tarefa:");
                String nome = input.nextLine();
                boolean estaNaLista = false;
                for( Tarefa tarefaLista : listaDeTarefas){
                    if(tarefaLista.getNomeTarefa().equals(nome)){
                        estaNaLista = true;
                    }
                }
                if(estaNaLista){
                    System.out.println("Esta tarefa já existe.");
                }
                System.out.println("Crie uma descrição para esta tarefa:");
                String descricao = input.nextLine();
                System.out.println("Defina o prazo para a realização desta tarefa: (dd/mm/aaaa)");
                String prazo = input.nextLine();
                System.out.println("Tarefa adicionada com sucesso!");

                Tarefa tarefa = new Tarefa();
                tarefa.setNomeTarefa(nome);
                tarefa.setDescricao(descricao);
                tarefa.setDataLimite(prazo);

                listaDeTarefas.add(tarefa);

agora quando chegar em casa vou tentar deixar esse flag correto e arrumar o erro do nextLine com nextInt que vc mencionou, obrigado

Opa, Jeaan. Eu dei uma olhada no teu código aí e percebi um erro no seu método setNomeTarefa(). Veja o método abaixo:

public void setNomeTarefa(String nome){
this.nomeTarefa = nomeTarefa;
}

Esse método recebe uma String chamada “nome”, mas essa String não está sendo atribuída à variável nomeTarefa, pois você tá atribuindo o mesmo nome da variável, veja: this.nomeTarefa = nomeTarefa;

O correto seria: this.nomeTarefa = nome;

1 curtida