Autor Beitrag
itchaas
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Sa 17.11.12 00:26 
Habe folgende Klasse DVD:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TestbeispielDVD
{
    class DVD
    {
        private string titel;
        private int laufzeit;
        private int gesamtlaufzeit=0;
        private DVD[] array = new DVD[5];

        public DVD(string titel, int laufzeit)
        {
            this.titel = titel;
            this.laufzeit = laufzeit;
            
        }

        public string Titel
        {
            get { return titel; }
            set { titel = value; }

        }

        public int Laufzeit
        {
            get { return laufzeit; }
            set { laufzeit = value; }
        }


        public void Gesamtlaufzeit()
        {
            for (int i = 0; i < sammlung.Length; i++)
            {
                gesamtlaufzeit = gesamtlaufzeit + sammlung[i].laufzeit;
            }
            Console.WriteLine("Die Gesamtlaufzeit beträgt: " + gesamtlaufzeit);
        }

        public void Drucken()
        {
            Console.WriteLine("Der Titel heißt: {0}, Die Laufzeit dieser DVD ist {1}", titel, laufzeit);
            Console.WriteLine();
            Console.WriteLine("Gesamtlaufzeit derzeit: " + gesamtlaufzeit);
        }
    }
}


& die Mainmethode/Klasse

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
        static void Main(string[] args)
        {            
            DVD[] sammlung = new DVD[5];
            sammlung[0]=  new DVD("DVD1"320);
            sammlung[1] = new DVD("DVD2"420);
            sammlung[2] = new DVD("DVD3"520);
            sammlung[3] = new DVD("DVD4"520);
            sammlung[4] = new DVD("DVD5"620);

            for (int i = 0; i < sammlung.Length; i++)
            {
                sammlung[i].Drucken();
            }            
        }


Ich MUSS die Einzellaufzeit + die Gesamtlaufzeit ausgeben erhalte da aber einen Fehler
da dass array in der DVD Klasse nicht bekannt ist - wie löse ich dass ?

Danke!

Moderiert von user profile iconTh69: Titel geändert.
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Sa 17.11.12 00:51 
Das Array "sammlung" in der Methode DVD.Gesamtlaufzeit() ist nicht bekannt, oder?


Das kannst du von dort nicht erreichen.
Das wäre auch unlogisch, da ein Objekt der Klasse DVD ja nur eine einzelne DVD darstellt und die anderen DVDs nicht kennt.
Die Anzahl DVDs kennt nur das Array selber.


Wenn du nun aber eine Methode haben willst, die die Anzahl berücksichtigt, musst du eine neue Klasse schreiben, die dann intern das Array verwaltet und so an die Anzahl kommt, oder du schreibst eine statische Methode, die dann ein DVD-Array verlangt.
itchaas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Sa 17.11.12 09:09 
Hab das jetzt so gelöst - passt das oder geht das ohne Objekt oder schöner?

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
class DVD
    {
        private string titel;
        private int laufzeit;
        private int gesamtlaufzeit=0;
        private int anzahldvds=0 ;
        private DVD[] sammlung = new DVD[5];

        public DVD(string titel, int laufzeit)
        {
            this.titel = titel;
            this.laufzeit = laufzeit;
            
        }

        public string Titel
        {
            get { return titel; }
            set { titel = value; }

        }

        public int Laufzeit
        {
            get { return laufzeit; }
            set { laufzeit = value; }
        }

        public void NewDVD(string titel, int laufzeit)
        {
            sammlung[anzahldvds] = new DVD(titel, laufzeit);
            anzahldvds++;
        }

        public void Gesamtlaufzeit()
        {
            for (int i = 0; i < sammlung.Length; i++)
            {
                gesamtlaufzeit = gesamtlaufzeit + sammlung[i].laufzeit;
            }
            Console.WriteLine("Die Gesamtlaufzeit beträgt: " + gesamtlaufzeit);
        }

        public void Drucken()
        {
            Console.WriteLine("Die Sammlung heißt: {0}", titel);
                                  
            
             for (int i = 0; i < anzahldvds; i++)
             {
                 Console.WriteLine("Diese beinhaltet folgende DVDs:" + sammlung[i].titel + " " + sammlung[i].laufzeit);
             }

             Console.WriteLine();
        }
    }


Testklasse:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
static void Main(string[] args)
        {
            DVD sammlung1 = new DVD("Meine DVD Sammlung"0);
            sammlung1.NewDVD("DVD1"620);

            sammlung1.Drucken();
            sammlung1.NewDVD("DVD2"520);
            sammlung1.NewDVD("DVD3"620);
            sammlung1.NewDVD("DVD4"720);
            sammlung1.NewDVD("DVD5"820);
            sammlung1.Drucken();
            sammlung1.Gesamtlaufzeit();
        }


Danke!
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 17.11.12 11:01 
Hallo itchaas,

du solltest dich schon entscheiden, was die Klasse DVD sein soll: Repräsentation genau einer DVD oder aber eine DVD-Sammlung? Aber nicht beides mischen.
Leg dir doch einfach eine zweite Klasse DVDSammlung an, in der du dann das Array DVD[] sammlung verwaltest und die dann die zugehörigen Methoden Gesamtlaufzeit() und Drucken() enthält.

P.S: Beitragstitel sinnvoller benannt ;-)
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Sa 17.11.12 12:37 
Wie Th69 schon sagt, am sinnvollsten ist es, eine neue Klasse zu erstellen.
Die muss ja nicht sonderlich umfangreich sein, es reicht ja schon, die Liste in der Klasse nach außen hin zugänglich zu machen, dann brauchst du nur eine Eigenschaft und deine zwei Methoden.

Oder du machst es etwas schöner und erbst von ICollection<DVD> und baust dann deine beiden Methoden dazu.
Ob das so sinnvoll ist, musst du entscheiden.
itchaas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: Sa 17.11.12 19:30 
Jo, dass mit der Zweiten Klasse ist klar dass weis ich ja.

Aber es war eine Vorgabe seitens des Kursleiters... wahrscheinlich um uns zum grübeln zu bringen...

Darum meine Frage wie das aussehen könnte wenn man wirklich nur eine cs hätte...
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Sa 17.11.12 19:46 
Du kannst es in einer cs haben, dann setzt du die zweite Klasse halt einfach darunter ^^

Also so:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
using Sytem;

namespace Namensraum
{
    class DVD
    {
        // Todo
    }

    class Sammlung
    {
        // Todo
    }
}


Das interessiert den Compiler kein Stück, solange du die Syntax bei behältst.