time struct

  • Onderwerp starter Onderwerp starter fira
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

fira

Nieuwe gebruiker
Lid geworden
18 jan 2011
Berichten
1
Code:
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;



namespace AudioDevices
{
    public enum category
    {
        Ambient,
	    Blues,
	    Country,
	    Disco,
	    Electro,
	    Hardcore,
	    HardRock,
	    HeavyMetal,
	    Hiphop,
	    Jazz,
	    Jumpstyle,
	    Klassiek,
	    Latin,
	    Other,
	    Pop,
	    Punk,
	    Reggae,
	    Rock,
	    Soul,
	    Trance,
	    Techno,
        Metal

    };





   /* struct time
    {

        private double m_seconds;
        private int m_minutes;
        private int m_hours;

        public time(int hours, int minutes, double seconds)
        {
            m_hours = hours;
            m_minutes = minutes;
            m_seconds = seconds;


        }
        public double seconds
        {
            set
            {

            
            
            
            
            }
        
        
        }

        

    }*/
        
       
    struct mp3
    {
        private int m_id;
        private string m_name;
        private string m_artist;
        private string m_albumsource;
        private category m_style;
        private double m_lenght;

        public mp3(int id, string name, string artist, string albumsource, category style, double lenght)
        {
            m_id = id;
            m_name = name;
            m_artist = artist;
            m_albumsource = albumsource;
            m_style = style;
            m_lenght = lenght;
            
            
            
        }

        public int id
        {
            get
            {
                return m_id;
            }
            set
            {
                m_id = value;
            }



        }

        public string name
        {
            get
            {
                return m_name;
            }
            set
            {
                m_name = value;
            }


        }

        public string artist
        {
            get
            {
                return m_artist;
            }
            set
            {
                m_artist = value;
            }


        }

        public string albumsource
        {
            get
            {
                return m_albumsource;
            }
            set
            {
                m_albumsource = value;
            }


        }

        public category style
        {
            get
            {
                
                return m_style;
            }
            set
            {
                m_style = value;
            }


        }
        
      
        public double lenght
        {

            get
            {

                return m_lenght;

            }
            set
            {


                m_lenght = value;
                
            }




        }



    }

    class track
    {
        static ArrayList mp3info = new ArrayList();

        public static void information()
        {
            

            mp3 a1 = new mp3(1,"naame","test", "test", category.Metal,90);
            mp3 a2 = new mp3(2, "naame", "test", "test", category.Rock, 160);

            mp3info.Add(a1);
            mp3info.Add(a2);

            

            foreach (mp3 player in Getmp3info())
            {
                TimeSpan time = TimeSpan.FromSeconds(player.lenght);
                Console.WriteLine(time.ToString());
                                           
            }
            Console.Read();
            
        }




        public static ArrayList Getmp3info()
        {
            return mp3info;
        }
    }
}

hallo,
ik wil een mp3 speler maken met c# en ik wil graag 1 ding weten.
mijn doel is om de lenght te veranderen naar een <hours>:<minutes>:<seconds> output.

met de code die ik liet zien is de output wel <hours>:<minutes>:<seconds> maar deze veranderd hij niet direct in de struct.


wat ik gelezen heb ergens:
Code:
Time type**
Om de lengte van een track op te slaan maak je gebruik van een structure Time. Maak deze structure met de volgende specificaties:
De structure moet drie integer variabelen bevatten:  hours, minutes en seconds.
De structure moet de volgende drie constructors bevatten:

public Time(int seconds)
public Time(int minutes, int seconds)
public Time(int hours, int minutes, int seconds)

Zorg ervoor dat de constructor de juiste waarden toekent aan de interne variabelen. 
Voorbeeld:

Time t = new Time(100)  

Nu dient de structure t de volgende waarden te bevatten:
hours:		0
minutes:	1
seconds:	40

Override de ToString() method van de Time structure zodat deze een string terug geeft met de volgende format:  <hours> : <minutes> : <seconds>.

De Track Class dient de volgende twee public methods te bevatten:
GetLength()
De method GetLength() geeft de lengte van de Track terug in de vorm van een Time structure.

GetLengthInSeconds()
De method GetLengthInSeconds() geeft de lengte van de Track in secondes terug in de vorm van een integer variabele. In deze method vindt dus een conversie plaats van de tijd, geregistreerd in de private field length van het type structure Time, naar een integer.

Properties:
name: length
type: time
get: no
set: yes
Lengte van de track als een int (secondes).
name: display length
type: string
get: yes
set: no
Lengte van de track als een string.

kan iemand me misschien helpen?
 
Laatst bewerkt:
Uit je eigen quote:

De structure moet de volgende drie constructors bevatten:

public Time(int seconds)
public Time(int minutes, int seconds)
public Time(int hours, int minutes, int seconds)
Jij hebt alleen de laatste

Daarnaast gebruik je voor seconds een double ipv de in quote aangehaalde integer. Is daar een specifieke reden voor?
 
Bedoel je dit ?

Code:
    public class Tijd
    {
        // 'FIELDS'
        private int _Seconden;
        private int _Minuten;
        private int _Uren;
        // 'PROPERTYS'
        public int Seconden
        {
            set { _Seconden = value; }
            get
            {
                while (_Seconden >= 60)
                {
                    _Seconden = _Seconden - 60;
                    _Minuten = _Minuten + 1;
                }
                return _Seconden;
            }
        }
        public int Minuten
        {
            set { _Minuten = value; }
            get
            {
                while (_Minuten >= 60)
                {
                    _Minuten = _Minuten - 60;
                    _Uren = _Uren + 1;
                }
                return _Minuten;
            }
        }
        public int Uren
        {
            set { _Uren = value; }
            get { return _Uren;  }
        }
        // 'CONSTRUCTORS'
        public Tijd(int Sec)
        {
            Seconden = Sec;
        }
        public Tijd(int Sec, int Min)
        {
            Seconden = Sec;
            Minuten = Min;
        }
        public Tijd(int Sec, int Min, int Uur)
        {
            Seconden = Sec;
            Minuten = Min;
            Uren = Uur;
        }
    }
    class program
    {
        static void Main(string[] args)
        {
            // Declaratie
            Tijd T = new Tijd(100);
           // Output.
            Console.WriteLine("Seconden: " + T.Seconden);
            Console.WriteLine("Minuten:  " + T.Minuten);
            Console.WriteLine("Uren:     " + T.Uren);
        }
    }
 
Bedoel je dit ?

Code:
    public class Tijd
    {
        // 'FIELDS'
        private int _Seconden;
        private int _Minuten;
        private int _Uren;
        // 'PROPERTYS'
        public int Seconden
        {
            set { _Seconden = value; }
            get
            {
                while (_Seconden >= 60)
                {
                    _Seconden = _Seconden - 60;
                    _Minuten = _Minuten + 1;
                }
                return _Seconden;
            }
        }
        public int Minuten
        {
            set { _Minuten = value; }
            get
            {
                while (_Minuten >= 60)
                {
                    _Minuten = _Minuten - 60;
                    _Uren = _Uren + 1;
                }
                return _Minuten;
            }
        }
        public int Uren
        {
            set { _Uren = value; }
            get { return _Uren;  }
        }
        // 'CONSTRUCTORS'
        public Tijd(int Sec)
        {
            Seconden = Sec;
        }
        public Tijd(int Sec, int Min)
        {
            Seconden = Sec;
            Minuten = Min;
        }
        public Tijd(int Sec, int Min, int Uur)
        {
            Seconden = Sec;
            Minuten = Min;
            Uren = Uur;
        }
    }
    class program
    {
        static void Main(string[] args)
        {
            // Declaratie
            Tijd T = new Tijd(100);
           // Output.
            Console.WriteLine("Seconden: " + T.Seconden);
            Console.WriteLine("Minuten:  " + T.Minuten);
            Console.WriteLine("Uren:     " + T.Uren);
        }
    }

Behalve het punt dat de code erg lelijk is, zit er ook nog een bug in: wat als ik eerst T.Uren aanroep (dus voor de .Seconden en .Minuten)?
Het is niet netjes om de Seconden aanroep ook al dingen voor de Minuten te laten berekenen.

Edit: kan dit niet op een of andere manier opgelost worden met de DateTime klasse?

Edit2: net pas gelezen wat eigenlijk de bedoeling is. Zou je niet zoiets kunnen doen:
[totaal aantal seconden] / 3600 = [aantal uur]
[totaal aantal seconden] / 60 % 60 = [aantal minuten]
[totaal aantal seconden] % 60 = [aantal seconden]

Totaal aantal secs = 12855
12855 / 3600 = 3(.5) uur
12855 / 60 % 60 = 34 min
12855 % 60 = 15 sec

15 + (34*60) + (3*3600) = 12855
 
Laatst bewerkt:
Dat geeft geen Bug voormij.
maar er stond in van Time t = new Time(100);
en dat het 40 seconde en 1minuut moest weergeven.

Dat heb ik ook gemaakt en het werkt.

Dat de code lelijk is daar heb je wel gelijk in. :p
 
Laatst bewerkt:
Dat geeft geen Bug voormij.

Uiteraard wel. Omdat het aantal uren normaal gesproken voor het aantal minuten wordt getoond, roep je dus eerst de Uren-property aan. Het totaal aan uren is echter pas bekend na het aanroepen van de properties Seconden en Minuten. Een simpel voorbeeld:

[cpp]
class Time
{
// ...
public override string ToString()
{
return string.Format("<{0}>:<{1}>:<{2}>", this.Uren, this.Minuten, this.Seconden); // gezien de properties de waardes afhandelen ben je dus verplicht om deze te gebruiken
}
}
// ...
Time t = new Time(7200); // t.ToString() = <0>:<0>:<0>
[/cpp]

maar er stond in van Time t = new Time(100);
en dat het 40 seconde en 1minuut moest weergeven.

Dat heb ik ook gemaakt en het werkt.

Ja, in het geval van new Time(100) wel :p

edit: het is dus de bedoeling om het in de constructor af te handelen. Iets als:

[cpp]
class Time
{
private void CalculateTime(int totalSeconds)
{
// ...
}

public Time(int s) { CalculateTime(s); }
public Time(int m, int s) { CalculateTime(m*60+s); }
public Time(int h, int m, int s) { CalculateTime(h*3600+m*60+s); }

public override string ToString()
{
return string.Format("<{0}>:<{1}>:<{2}>", uren, minuten, seconden);
}
}
[/cpp]
 
Laatst bewerkt:
[cpp]
class Time
{
private void CalculateTime(int totalSeconds)
{
// ...
}

public Time(int s) { CalculateTime(s); }
public Time(int m, int s) { CalculateTime(m*60+s); }
public Time(int h, int m, int s) { CalculateTime(h*3600+m*60+s); }

public override string ToString()
{
return string.Format("<{0}>:<{1}>:<{2}>", uren, minuten, seconden);
}
}
[/cpp]

Nice! :) Nu hoeft TS alleen de logica van "CalculateTime" nog te implementeren, iets wat niet al te moeilijk is lijkt mij ;)
 
public Time(int m, int s) { CalculateTime(m*60+s); }
nu definieer je toch alleen maar m en niet s?
ik ben met dezelfde opdracht bezig maar snap hem ookniet helemaal.
 
public Time(int m, int s) { CalculateTime(m*60+s); }
nu definieer je toch alleen maar m en niet s?
ik ben met dezelfde opdracht bezig maar snap hem ook niet helemaal.
en het is de bedoeling dat het in een struct komt, dus niet class time maar struct time.
kun je public override string ToString() ook in een struct toepassen?
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan