Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

AndreLopes20

Duvida

Mensagens Recomendadas

AndreLopes20    0
AndreLopes20

Boa tarde ,

Estou a fazer um trabalho para a fac e bloqueei no seguinte excerto do codigo :

                    static void criarfilaespera()
				{
					Queue filaespera = new Queue();
					filaespera.Enqueue(new Desktop(52 * 49.6, 1000, "HP", "Pavilion", "Intel Core i7", 3.2, 1, 8, 0));
					filaespera.Enqueue(new Laptop(13.3, 1001, "Asus", "Vivobook Flip", "Intel Core i7", 2.4, 500, 8, 11));
					filaespera.Enqueue(new Desktop(43.8 * 18, 1002, "Acer", "Predator", "Intel Core i7", 3.6, 1, 32, 1));
					filaespera.Enqueue(new Laptop(15.4, 1003, "Apple", "Macbook Pro", "Intel Core i7", 2.5, 512, 16, 12));
					filaespera.Enqueue(new Desktop(20.6 * 47.8, 1004, "Lenovo", "Ideacenter", "IntelCore i7", 3.4, 1, 16, 2));
					filaespera.Enqueue(new Laptop(17.3, 1005, "Dell", "Inspiron", "Intel Core i5", 2.2, 512, 16, 13));
					filaespera.Enqueue(new Desktop(46.9 * 20.8, 1006, "CyberPowerPC", "GamerSupreme", "Intel Core i7", 4, 2176, 16, 3));
					filaespera.Enqueue(new Laptop(15.6, 1007, "Samsung", "Notebook", "Intel Core i7", 2.6, 256, 8, 14));
					filaespera.Enqueue(new Desktop(175 * 41.3, 1008, "Acer", "Aspire", "AMD A8", 3.10, 1, 8, 4));
					filaespera.Enqueue(new Laptop(14.0, 1009, "Toshiba", "Satellite", "Intel Celeron", 2.1, 320, 2, 14));
					filaespera.Enqueue(new Desktop(16.54 * 15.79, 1010, "HP", "Envy", "Intel Core i7", 4.0, 1, 16, 5));
					filaespera.Enqueue(new Laptop(12.5, 1011, "Dell", "XPS", "Intel Core i5", 2.7, 128, 8, 15));
					filaespera.Enqueue(new Desktop(6.7 * 15.7, 1012, "HP", "WorkStation", "Intel Core i5", 3.2, 1, 4, 6));
					filaespera.Enqueue(new Laptop(13.3, 1013, "Toshiba", "Kira", "Intel Core i7", 3, 256, 8, 16));
					filaespera.Enqueue(new Desktop(33.6 * 10.1, 1014, "Lenovo", "ThinkCenter", "Intel Core i3", 3.6, 500, 4, 7));
					filaespera.Enqueue(new Laptop(17.3, 1015, "Toshiba", "Qosmio", "Intel Core i7", 2, 1, 16, 17));
					filaespera.Enqueue(new Desktop(33.8 * 10.2, 1016, "Lenovo", "ThinkCenter M83", "Intel Core i5", 3.3, 1, 4, 8));
					filaespera.Enqueue(new Laptop(15.6, 1017, "Apple", "Macbook Air", "Intel Core i5", 2.7, 128, 4, 18));
					filaespera.Enqueue(new Desktop(37.6 * 18.1, 1018, "Acer", "Veriton", "Intel Core i5", 3.2, 1, 4, 9));
					filaespera.Enqueue(new Laptop(12, 1019, "Apple", "Macbook", "Intel Core I7", 1.2, 512, 8, 19));
}

A minha duvida é , como é que eu faço para colocar no ecran estes valores , visto que aquilo que eu estou a inserir nas filas são de duas classes diferentes .

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
He B TeMy    37
He B TeMy

Têns um exemplo na msdn https://msdn.microsoft.com/en-us/library/system.collections.queue%28v=vs.110%29.aspx

using System;
using System.Collections;
public class SamplesQueue  {

   public static void Main()  {

   // Creates and initializes a new Queue.
   Queue myQ = new Queue();
   myQ.Enqueue("Hello");
   myQ.Enqueue("World");
   myQ.Enqueue("!");

   // Displays the properties and values of the Queue.
   Console.WriteLine( "myQ" );
   Console.WriteLine( "\tCount:    {0}", myQ.Count );
   Console.Write( "\tValues:" );
   PrintValues( myQ );
   }


   public static void PrintValues( IEnumerable myCollection )  {
   foreach ( Object obj in myCollection )
	  Console.Write( "    {0}", obj );
   Console.WriteLine();
   }
}
/*
This code produces the following output.

myQ
 Count:    3
 Values:    Hello    World    !
*/

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLopes20    0
AndreLopes20

Fui experimentar o que me disseste e continua sem aparecer nada no menu ... aparece assim :

I - Observação da Fila de Espera de Computadores para Reparação

J - Observação da Lista de Computadores em Reparação

K - Observação da Lista de Espera de Computadores reparados para entrega aos Clientes

L - Sair do Programa

Digite uma opção:

i

Fila de Espera

Count: 20

Values: AED.Desktop AED.Laptop AED.Desktop AED.Laptop AED.Desktop AED.Laptop AED.Desktop AED.Laptop AED.Desktop AED.Laptop AED.Desktop AED.Laptop AED.Desktop AED.Laptop AED.Desktop AED.Laptop AED.Desktop AED.Laptop AED.Desktop AED.Laptop

Premir a tecla enter para continuar ...

O que é que eu faço para conseguir mostrar ?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
He B TeMy    37
He B TeMy

Mostra a classe Desktop e Laptop, esse "new" é mesmo necessário? Visto que não estar a usar nenhum dos objectos, apenas adicionando...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLopes20    0
AndreLopes20

A classe desktop e Laptop são subclasses da classe Computador ... eu mostro-te o codigo que percebes melhor

public abstract class Computador
   {
    protected int codigo_computador;
    protected string marca;
    protected string modelo;
    protected string processador;
    protected double velocidade;
    protected int memoria_RAM;
    protected int capacidade_disco;
    protected int numero_cliente;

    public Computador()
    {
	    codigo_computador = 0;
	    marca = "";
	    modelo = "";
	    processador = "";
	    velocidade = 0.0;
	    memoria_RAM = 0;
	    capacidade_disco = 0;
	    numero_cliente = 0;
    }
    public Computador(int z, string x, string c, string v, double b, int n, int m, int a)
    {
	    this.codigo_computador = z;
	    this.marca = x;
	    this.modelo = c;
	    this.processador = v;
	    this.velocidade = b;
	    this.memoria_RAM = n;
	    this.capacidade_disco = m;
	    this.numero_cliente = a;
    }
    public int Ccodigo_computador
    {
	    get
	    { return codigo_computador; }
	    set
	    { codigo_computador = value; }
    }
    public string Cmarca
    {
	    get
	    { return marca; }
	    set
	    { marca = value; }
    }
    public string Cmodelo
    {
	    get { return modelo; }
	    set { modelo = value; }
    }
    public string Cprocessador
    {
	    get { return processador; }
	    set { processador = value; }
    }
    public double Cvelocidade
    {
	    get { return velocidade; }
	    set { velocidade = value; }
    }
    public int Cmemoria_RAM
    {
	    get { return memoria_RAM; }
	    set { memoria_RAM = value; }
    }
    public int Ccapacidade_disco
    {
	    get { return capacidade_disco; }
	    set { capacidade_disco = value; }
    }
    public int Cnumero_cliente
    {
	    get { return numero_cliente; }
	    set { numero_cliente = value; }
    }
   }
   public class Desktop : Computador
   {
    protected double dimensao_torre;
    public Desktop(double t, int z, string x, string c, string v, double b, int n, int m, int a)
	    : base(z, x, c, v, b, n, m, a)
    { dimensao_torre = t; }
    public double Cdimensao_torre
    {
	    get { return dimensao_torre; }
	    set { dimensao_torre = value; }
    }
    public void Display()
    {
	    Console.WriteLine(" Desktop \n: Codigo Do Computador = \n " + codigo_computador + " Marca do Computador= \n" + marca + "  Modelo do Computador = \n " + modelo +
	    " Processador do Computador = \n" + processador + " Velocidade do Computador = \n" + velocidade + " Memoria RAM do Computador = \n" + memoria_RAM +
	    " Capacidade do disco do Computador = \n" + capacidade_disco + " Numero do Cliente = \n" + numero_cliente + " Dimensão da Torre do Computador = \n" + dimensao_torre);
    }
   }
	    public class Laptop : Computador
	    {
		    protected double ecran;
		    public Laptop(double y, int z, string x, string c, string v, double b, int n, int m, int a)
			    : base(z, x, c, v, b, n, m, a)
		    {
			    ecran = y;
		    }
		    public double Cecran
		    {
			    get { return ecran; }
			    set { ecran = value; }
		    }
		    public void Display()
		    {
			    Console.WriteLine(" Desktop \n: Codigo Do Computador = \n " + codigo_computador + " Marca do Computador= \n" + marca + "  Modelo do Computador = \n " + modelo +
			    " Processador do Computador = \n" + processador + " Velocidade do Computador = \n" + velocidade + " Memoria RAM do Computador = \n" + memoria_RAM +
			    " Capacidade do disco do Computador = \n" + capacidade_disco + " Numero do Cliente = \n" + numero_cliente + " Dimensão do Ecran do Computador = \n" + ecran);
		    }
	    }

Pois eu tambem acho que não , mas se eu nao meter o new ele dá-me erro ... não sei mesmo o que fazer

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
He B TeMy    37
He B TeMy

Claro que se não meteres New dá erro, não era essa a questão, a questão era, precisas mesmo da classe visto não estares a usar nenhum objecto dos que estás a criar (new) ?

Supondo que sim, visto que tens uma sub "Display" em cada uma , (secalhar seria melhor pô-la na classe Computador e depois herdá-la para as outras classes) tenta fazer assim:

foreach ( Object obj in myCollection ) {
if obj is Desktop {
(Desktop)obj.Display(); }
{
(Laptop)obj.Display();
}
}

substitui o código da "PrintValues" no meu post anterior por este, atenção que só podes ter duas classes possíveis neste código (Desktop e Laptop), senão tens de fazer mais error-checking.

Editado por He B TeMy

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLopes20    0
AndreLopes20

A tua sugestão e colocar o codigo assim

  static void criarfilaespera()
			    {
				    Queue filaespera = new Queue();
				    filaespera.Enqueue(new Desktop(52 * 49.6, 1000, "HP", "Pavilion", "Intel Core i7", 3.2, 1, 8, 0));
				    filaespera.Enqueue(new Laptop(13.3, 1001, "Asus", "Vivobook Flip", "Intel Core i7", 2.4, 500, 8, 11));
				    filaespera.Enqueue(new Desktop(43.8 * 18, 1002, "Acer", "Predator", "Intel Core i7", 3.6, 1, 32, 1));
				    filaespera.Enqueue(new Laptop(15.4, 1003, "Apple", "Macbook Pro", "Intel Core i7", 2.5, 512, 16, 12));
				    filaespera.Enqueue(new Desktop(20.6 * 47.8, 1004, "Lenovo", "Ideacenter", "IntelCore i7", 3.4, 1, 16, 2));
				    filaespera.Enqueue(new Laptop(17.3, 1005, "Dell", "Inspiron", "Intel Core i5", 2.2, 512, 16, 13));
				    filaespera.Enqueue(new Desktop(46.9 * 20.8, 1006, "CyberPowerPC", "GamerSupreme", "Intel Core i7", 4, 2176, 16, 3));
				    filaespera.Enqueue(new Laptop(15.6, 1007, "Samsung", "Notebook", "Intel Core i7", 2.6, 256, 8, 14));
				    filaespera.Enqueue(new Desktop(175 * 41.3, 1008, "Acer", "Aspire", "AMD A8", 3.10, 1, 8, 4));
				    filaespera.Enqueue(new Laptop(14.0, 1009, "Toshiba", "Satellite", "Intel Celeron", 2.1, 320, 2, 14));
				    filaespera.Enqueue(new Desktop(16.54 * 15.79, 1010, "HP", "Envy", "Intel Core i7", 4.0, 1, 16, 5));
				    filaespera.Enqueue(new Laptop(12.5, 1011, "Dell", "XPS", "Intel Core i5", 2.7, 128, 8, 15));
				    filaespera.Enqueue(new Desktop(6.7 * 15.7, 1012, "HP", "WorkStation", "Intel Core i5", 3.2, 1, 4, 6));
				    filaespera.Enqueue(new Laptop(13.3, 1013, "Toshiba", "Kira", "Intel Core i7", 3, 256, 8, 16));
				    filaespera.Enqueue(new Desktop(33.6 * 10.1, 1014, "Lenovo", "ThinkCenter", "Intel Core i3", 3.6, 500, 4, 7));
				    filaespera.Enqueue(new Laptop(17.3, 1015, "Toshiba", "Qosmio", "Intel Core i7", 2, 1, 16, 17));
				    filaespera.Enqueue(new Desktop(33.8 * 10.2, 1016, "Lenovo", "ThinkCenter M83", "Intel Core i5", 3.3, 1, 4, 8));
				    filaespera.Enqueue(new Laptop(15.6, 1017, "Apple", "Macbook Air", "Intel Core i5", 2.7, 128, 4, 18));
				    filaespera.Enqueue(new Desktop(37.6 * 18.1, 1018, "Acer", "Veriton", "Intel Core i5", 3.2, 1, 4, 9));
				    filaespera.Enqueue(new Laptop(12, 1019, "Apple", "Macbook", "Intel Core I7", 1.2, 512, 8, 19));
			    Console.WriteLine("Fila de Espera ");
			    Console.WriteLine("\tCount:    {0}", filaespera.Count);
			    Console.Write("\tValues:");
			    PrintValues(filaespera);
	    }
    public static void PrintValues(IEnumerable myCollection)
		    {
			    foreach (Object obj in myCollection)
			    {
					 if( obj is Desktop)
					  {
					  (Desktop)obj.Display();
				    }
						 {
					    (Laptop)obj.Display();
				    }
			 }
    }

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
He B TeMy    37
He B TeMy

Remove

Console.WriteLine("\tCount:    {0}", filaespera.Count);
                                   Console.Write("\tValues:");

De resto, parece bem... não funciona?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLopes20    0
AndreLopes20

Se eu não colocar a classe uma vez que não estou a criar nenhum objeto como é que faria ?

Não começa-me a dar erro naquele codigo que tu me enviaste neste aqui

foreach (Object obj in myCollection)
			    {
					 if( obj is Desktop)
					  {
					  (Desktop)obj.Display();
				    }
						 {
					    (Laptop)obj.Display();
				    }
			 }

Começa a dizer :

only assignment, call increment, decrement and new object expressions can be used as a statement

E diz tambem :

"object" does not contain a definition for "Display" and no extension method "Display" accepting a first argument of type "object" could be found

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
He B TeMy    37
He B TeMy

Provavelmente são objectos anónimos que não consegues aceder visto não os teres assinado a nenhuma variável...

Experimenta assinares um objecto como fazes em cima

new Desktop()

, mas a uma variável,

var x = new Desktop(etc)

; , adiciona á queue, e experimenta o código que te dei SÓ com esse objecto.

Não consigo testar o código porque tou em linux e não pego em código á uns 3 meses...

Editado por He B TeMy

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLopes20    0
AndreLopes20

class Program
   {
    static void criarfilaespera()
    {
	    var x = new Desktop(52 * 49.6, 1000, "HP", "Pavilion", "Intel Core i7", 3.2, 1, 8, 0);
	    Queue filaespera = new Queue();
	    filaespera.Enqueue(x);
	    PrintValues(filaespera);
    }
    public static void PrintValues(IEnumerable myCollection)
    {
	    foreach (Object obj in myCollection)
	    {
		    if (obj is Desktop)
		    {
			    (Desktop)obj.Display();
		    }
	    }
    }

Era assim que estavas a dizer para eu fazer ?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
He B TeMy    37
He B TeMy

Sim, não funciona?

Se não, experimenta antes de chamares o PrintValues, chamares x.Display() ,se funcionar, experimenta ToList assim:

foreach (Object obj in myCollection.ToList)
                   {
                           if (obj is Desktop)
                           {
                                   (Desktop)obj.Display();
                           }
                   }

Desculpa mas eu não te consigo ajudar melhor porque não tenho um editor aqui e não tou a ver nenhum problema com o código acima...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLopes20    0
AndreLopes20

Como disseste para fazer a bocado não funcionou , mas vou tentar agora desta forma ... Desde já obrigado pela tua ajuda

class Program
{
 static void criarfilaespera()
 {
	 var x = new Desktop(52 * 49.6, 1000, "HP", "Pavilion", "Intel Core i7", 3.2, 1, 8, 0);
	 Queue filaespera = new Queue();
	 filaespera.Enqueue(x);
	 //PrintValues(filaespera);
	 x.Display();
 }

Se eu fizer simplesmente isto funciona ... Tirei a outra parte do Print

class Program
{
 static void criarfilaespera()
 {
	 var x = new Desktop(52 * 49.6, 1000, "HP", "Pavilion", "Intel Core i7", 3.2, 1, 8, 0);
	 var y = new Laptop(43.8 * 18, 1002, "Acer", "Predator", "Intel Core i7", 3.6, 1, 32, 1);
	 Queue filaespera = new Queue();
	 filaespera.Enqueue(x);
	 filaespera.Enqueue(y);
	 //PrintValues(filaespera);
	 x.Display();
	 y.Display();
 }

Achas que assim esta correto para mostrar os dados do laptop ?

Editado por AndreLopes20

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
He B TeMy    37
He B TeMy

Tás a falar da string 'Desktop' aqui?

2579,2
Desktop

Isto é porque na tua class Laptop tens este código:

public void Display()
{
Console.WriteLine(" Desktop \n: Codigo Do Computador = \n " + codigo_computador + " Marca do Computador= \n" + marca + " Modelo do Computador = \n " + modelo +
//ETC
}

Ou seja, sem ser isso, já percebi que tá a funcionar, não percebo é porque não dá o outro código.

Verifica se isto funciona:

static void criarfilaespera()
	 {
			 var x = new Desktop(52 * 49.6, 1000, "HP", "Pavilion", "Intel Core i7", 3.2, 1, 8, 0);
			 var y = new Laptop(43.8 * 18, 1002, "Acer", "Predator", "Intel Core i7", 3.6, 1, 32, 1);
			 Queue filaespera = new Queue();
			 filaespera.Enqueue(x);
			 filaespera.Enqueue(y);
			 PrintValues(filaespera);
	 }

	 public static void PrintValues(IEnumerable myCollection)
	 {
			 foreach (Object obj in myCollection)
			 {
					 if (obj.GetType() == typeof(Desktop))
					 {
							 (Desktop)obj.Display();
					 }
{
(Laptop)obj.Display();
}
			 }
	 }

Mostra os erros que encontrares se não funcionar.

EDIT: Editei o código acima, testa este.

Editado por He B TeMy

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLopes20    0
AndreLopes20

Continua a aparecer estes erros :

only assignment, call increment, decrement and new object expressions can be used as a statement

"object" does not contain a definition for "Display" and no extension method "Display" accepting a first argument of type "object" could be found (are you missing a using directive or an assembly reference ?)

Como essa parte do codigo nao esta a funcionar fiz assim :

static void criarfilaespera()
	 {
		 var x = new Desktop(52 * 49.6, 1000, "HP", "Pavilion", "Intel Core i7", 3.2, 1, 8, 0);
		 var y = new Laptop(43.8 * 18, 1002, "Acer", "Predator", "Intel Core i7", 3.6, 1, 32, 1);
		 var q = new Desktop(43.8 * 18, 1002, "Acer", "Predator", "Intel Core i7", 3.6, 1, 32, 1);
		 var w = new Laptop(15.4, 1003, "Apple", "Macbook Pro", "Intel Core i7", 2.5, 512, 16, 12);
		 var e = new Desktop(20.6 * 47.8, 1004, "Lenovo", "Ideacenter", "IntelCore i7", 3.4, 1, 16, 2);
		 var r = new Laptop(17.3, 1005, "Dell", "Inspiron", "Intel Core i5", 2.2, 512, 16, 13);
		 var t = new Desktop(46.9 * 20.8, 1006, "CyberPowerPC", "GamerSupreme", "Intel Core i7", 4, 2176, 16, 3);
		 var i = new Laptop(15.6, 1007, "Samsung", "Notebook", "Intel Core i7", 2.6, 256, 8, 14);
		 var u = new Desktop(175 * 41.3, 1008, "Acer", "Aspire", "AMD A8", 3.10, 1, 8, 4);
		 var o = new Laptop(14.0, 1009, "Toshiba", "Satellite", "Intel Celeron", 2.1, 320, 2, 14);
		 var p = new Desktop(16.54 * 15.79, 1010, "HP", "Envy", "Intel Core i7", 4.0, 1, 16, 5);
		 var a = new Laptop(12.5, 1011, "Dell", "XPS", "Intel Core i5", 2.7, 128, 8, 15);
		 var s = new Desktop(6.7 * 15.7, 1012, "HP", "WorkStation", "Intel Core i5", 3.2, 1, 4, 6);
		 var d = new Laptop(13.3, 1013, "Toshiba", "Kira", "Intel Core i7", 3, 256, 8, 16);
		 var f = new Desktop(33.6 * 10.1, 1014, "Lenovo", "ThinkCenter", "Intel Core i3", 3.6, 500, 4, 7);
		 var g = new Laptop(17.3, 1015, "Toshiba", "Qosmio", "Intel Core i7", 2, 1, 16, 17);
		 var h = new Desktop(33.8 * 10.2, 1016, "Lenovo", "ThinkCenter M83", "Intel Core i5", 3.3, 1, 4, 8);
		 var j = new Laptop(15.6, 1017, "Apple", "Macbook Air", "Intel Core i5", 2.7, 128, 4, 18);
		 var k = new Desktop(37.6 * 18.1, 1018, "Acer", "Veriton", "Intel Core i5", 3.2, 1, 4, 9);
		 var l = new Laptop(12, 1019, "Apple", "Macbook", "Intel Core I7", 1.2, 512, 8, 19);
		 Queue filaespera = new Queue();
		 filaespera.Enqueue(x);
		 filaespera.Enqueue(y);
		 filaespera.Enqueue(q);
		 filaespera.Enqueue(w);
		 filaespera.Enqueue(e);
		 filaespera.Enqueue(r);
		 filaespera.Enqueue(t);
		 filaespera.Enqueue(i);
		 filaespera.Enqueue(u);
		 filaespera.Enqueue(o);
		 filaespera.Enqueue(p);
		 filaespera.Enqueue(a);
		 filaespera.Enqueue(s);
		 filaespera.Enqueue(d);
		 filaespera.Enqueue(f);
		 filaespera.Enqueue(g);
		 filaespera.Enqueue(h);
		 filaespera.Enqueue(j);
		 filaespera.Enqueue(k);
		 filaespera.Enqueue(l);
		 //PrintValues(filaespera);
		 x.Display();
		 y.Display();
		 q.Display();
		 w.Display();
		 e.Display();
		 r.Display();
		 t.Display();
		 i.Display();
		 u.Display();
		 o.Display();
		 p.Display();
		 a.Display();
		 s.Display();
		 d.Display();
		 f.Display();
		 g.Display();
		 h.Display();
		 j.Display();
		 k.Display();
		 l.Display();
    }

à alguma forma de fazer isto de forma diferente ? para tentar reduzir codigo

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
He B TeMy    37
He B TeMy

Claro que há, têm de funcionar, experimenta assim sem isso que acabas-te de adicionar.

if (obj is Desktop)
					    {
							    ((Desktop)obj).Display();
					    }                    
                           {                            
                           ((Laptop)obj).Display();
                           }                        
			    }

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLopes20    0
AndreLopes20

Este codigo funciona uma parte , ele mostra os dados do desktop e depois bloqueia

Nao mostra a parte do laptop

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLopes20    0
AndreLopes20

Calma que eu tinha posto mal ...Vou ver se funciona agora

class Program
   {
    static void criarfilaespera()
    {
	    var x = new Desktop(52 * 49.6, 1000, "HP", "Pavilion", "Intel Core i7", 3.2, 1, 8, 0);
	    var y = new Laptop(43.8 * 18, 1002, "Acer", "Predator", "Intel Core i7", 3.6, 1, 32, 1);
	    Queue filaespera = new Queue();
	    filaespera.Enqueue(x);
	    filaespera.Enqueue(y);
	    PrintValues(filaespera);
    }
    public static void PrintValues(IEnumerable myCollection)
    {
	    foreach (Object obj in myCollection)
	    {
		    if (obj is Desktop)
		    {
			    ((Desktop)obj).Display();
		    }
		    {
			    ((Laptop)obj).Display();
		    }
	    }
    }

Estou a colocar este codigo ... pode ser que eu me tenha enganado em algum lado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
He B TeMy    37
He B TeMy

E que parte é que dá erro? Não vejo nada errado...

Edit: Esqueceste-te dum edit que eu fiz... neste caso pode fazer diferença, experimenta.

if (obj.GetType() == typeof(Desktop))
					    {
							    ((Desktop)obj).Display();
					    }
					    {
							    ((Laptop)obj).Display();
					    }      

Editado por He B TeMy

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLopes20    0
AndreLopes20

ele fecha a tela onde aparece o programa a correr e depois abre-me o visual studio e sublinha a parte do laptop e aparece um tela que diz invalidcastexception was unhandled e depois diz mais uma coisas dentro disso, como por exemplo isto : Additional information: Não é possível converter um objeto do tipo 'ConsoleApplication5.Desktop' no tipo 'ConsoleApplication5.Laptop'.

Editado por AndreLopes20

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
He B TeMy    37
He B TeMy

Deveria dar... para tirar dúvidas vê este.

foreach (Object obj in myCollection)
			    {
					   if (obj.GetType() == typeof(Desktop))
							    ((Desktop)obj).Display();
                           else if(obj.GetType == typeof(Laptop))
							    ((Laptop)obj).Display();						   
			    }

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.