Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Meu loop não escreve na tela os valores da lista . C#

Criei uma classe Carros

public class Carros
{
    
        public string? Nome;
        public string? Marca;
        public int VelocidadeMaxima;
        public int AnoDeFabricacao;
    
}

Depois no meu Program criei:

List<Carros> listaDeCarros = new List<Carros>();

Carros carro01 = new Carros();
carro01.Nome = "Civic";
carro01.Marca = "Honda";
carro01.AnoDeFabricacao = 2008;
carro01.VelocidadeMaxima = 240;


Carros carro02 = new Carros();
carro01.Nome = "Gol";
carro01.Marca = "VW";
carro01.AnoDeFabricacao = 2003;
carro01.VelocidadeMaxima = 180;

Carros carro03 = new Carros();
carro01.Nome = "Voyage";
carro01.Marca = "VW";
carro01.AnoDeFabricacao = 2020;
carro01.VelocidadeMaxima = 200;

listaDeCarros.Add(carro01);
listaDeCarros.Add(carro02);
listaDeCarros.Add(carro03);

 void ListaDeCarros()
{
    for (int i = 0; i < listaDeCarros.Count; i++)
    {
        Console.WriteLine($"Caracteristicas dos carros ->");
        Console.WriteLine($"Nome: {listaDeCarros[i].Nome}");
        Console.WriteLine($"Marca: {listaDeCarros[i].Marca}");
        Console.WriteLine($"Ano de fabricação: {listaDeCarros[i].AnoDeFabricacao}");
        Console.WriteLine($"Velocidade maxima: {listaDeCarros[i].VelocidadeMaxima}Km");
        Console.WriteLine($"=================================");

    }
    Console.ReadKey();
}

ListaDeCarros();

Tentei com Foreach também , e só escreve na tela os dados do carro01, depois os outros saem sem valor, alguém pode me dizer o por que ?

OBG.

2 respostas
solução!

Oi Fabio, tudo bem?

O problema está na atribuição dos valores aos objetos carro02 e carro03. No seu código, você está atribuindo os valores novamente ao objeto carro01 em vez de atribuí-los aos objetos corretos. Isso faz com que todos os objetos tenham os mesmos valores.

Aqui está o trecho corrigido:

Carros carro01 = new Carros();
carro01.Nome = "Civic";
carro01.Marca = "Honda";
carro01.AnoDeFabricacao = 2008;
carro01.VelocidadeMaxima = 240;

Carros carro02 = new Carros();
carro02.Nome = "Gol";  // Corrigido aqui
carro02.Marca = "VW";  // Corrigido aqui
carro02.AnoDeFabricacao = 2003;  // Corrigido aqui
carro02.VelocidadeMaxima = 180;  // Corrigido aqui

Carros carro03 = new Carros();
carro03.Nome = "Voyage";  // Corrigido aqui
carro03.Marca = "VW";  // Corrigido aqui
carro03.AnoDeFabricacao = 2020;  // Corrigido aqui
carro03.VelocidadeMaxima = 200;  // Corrigido aqui

Certifique-se de corrigir essas atribuições para cada objeto carro02 e carro03. Depois disso, seu loop for ou foreach deve funcionar corretamente e imprimir todas as informações dos carros na tela.

Um abraço e bons estudos.

Bom dia, Fabio! Tudo bem?

Pelo que pude ver no seu código, quando você instancia os objetos de classe Carros, você está sempre vinculando ao objeto "carro01". O correto para seu objetivo seria, após cada instância gerada, utilizar o respectivo objeto para preencher os atributos da classe Carros.

Carros carro02 = new Carros();
carro01.Nome = "Gol";
carro01.Marca = "VW";
carro01.AnoDeFabricacao = 2003;
carro01.VelocidadeMaxima = 180;

Neste caso, o correto seria:

Carros carro02 = new Carros(); carro02.Nome = "Gol"; carro02.Marca = "VW"; carro02.AnoDeFabricacao = 2003; carro02.VelocidadeMaxima = 180;

O mesmo deve ser repetido para os demais carros cadastrados.