Array füllen


Hallo Leute,

Ich möchte den Titel und die Adresse in einem Array von meiner Entwickelten Klasse Favoriten speichern und später in der Console ausgeben.

Meine Frage
Wie speicher ich meine Eingaben in das Favoriten Array?

C#:
class Favorite
{
string name;
Uri url;

public Favorite(string name, Uri url)
{
this.name = name;
this.url = url;
}

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

public Uri URL
{
get { return url; }
set { url = value; }
}

public void Open()
{
Process.Start(url.ToString());
}
}

class Program
{
static void Main(string[] args)
{
int zahl;
Console.WriteLine("Anzahl der zu speichernden Favoriten");
zahl = Convert.ToInt32(Console.ReadLine());

args = new string[zahl];

Favorite[] favarray = new Favorite[zahl];

for (int i = 0; i < args.Length; i++)
{

}

Console.ReadKey();
}
}
PS: Bitte keine Lösung posten sondern erklären :)
 
Zuletzt bearbeitet von einem Moderator:

sheel

I love Asm
Mir ist nicht klar, was du erreichen willst (zB., ob die Daten von den Konsolenparametern oder
Tastatureingaben im Programm kommen sollen) und wobei du dich nicht auskennst.
 

Spyke

Premium-User
du kannst ganz einfach über den Indexer des Arrays arbeiten:
Code:
for(int i=0;i < zahl; i++)
   favarray[i] = new Favorite(...);
 
Das ist die Übungsaufgabe:

Erstellen Sie eine Konsolenanwendung, die den Anwender auffordert, eine bestimmte Zahl an Favoriten zu speichern. Die Zahl der zu speichernden Favoriten soll dabei als Kommandozeilenparameter übergeben werden. Speichern Sie dann die Eingaben, die aus einem Namen und einer WWW-Adresse bestehen, in einem Array vom Typ der in diesem Kapitel entwickelten Klasse Favorite. Anschließend soll der Anwender den Index des entsprechenden Favoriten angegeben, der im Browser geöffnet werden soll.

Wenn ich nun das Array mit der foreach Schleife lesen möchte gibt die Console nur ConsoleApplicationTest.Favorite aus
 

sheel

I love Asm
In deinem gezeigten Code ist gar keine foreach-Schleife.
Wenn dort etwas nicht funktioniert, bitte auch zeigen...
 
sry vergessen
C#:
class Favorite
    {
        string name;
        Uri url;

        public Favorite(string name, Uri url)
        {
            this.name = name;
            this.url = url;
        }

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

        public Uri URL
        {
            get { return url; }
            set { url = value; }
        }

        public void Open()
        {
            Process.Start(url.ToString());
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            int zahl;
            Console.WriteLine("Anzahl der zu speichernden Favoriten");
            zahl = Convert.ToInt32(Console.ReadLine());

            Favorite[] favarray = new Favorite[zahl];
            for (int i = 0; i < zahl; i++)
            {
                favarray[I] = new Favorite(Console.ReadLine(),new Uri(Console.ReadLine()));
            }

            foreach (Favorite i in favarray)
            {
                Console.WriteLine(i);
            }

            Console.ReadKey();
        }
    }
 

sheel

I love Asm
(und bitte lass nicht immer mich die Codeboxen erstellen. Das kannst du auch selbst.)

Naja, es macht genau was du geschrieben hast.
Du willst Objekte der Klasse Favorite auf die Konsole ausgeben.
Aber wie schaut ein "Favorite" in Textform aus?

Nur, weil da zwei Stringvariablen drin sind, heißt das für den Computer nicht, dass die beide zusammen
die Textrepräsentation von einem Favorite sind. Entweder, du gibst i.Name und i.URL separat aus, oder
du machst eine Methode ToString in Favorite, die den auszugebenden Text returned.
 

Spyke

Premium-User
oder
du machst eine Methode ToString in Favorite, die den auszugebenden Text returned.
nur zur Ergänzung, was #sheel meint ist du musst die ToString Methode überschreiben.
Da du direkt versucht hast ein Objekt auszugeben geht hier das .Net Framework intern auf die ToString Methode.

P.S.:
Klassen und Strukturen sind alle implizit von object abgeleitet, weshalb du diese ganz leicht überschreiben kannst.
 
Danke :) ich poste mal mein Code
C#:
class Favorite
    {
        string name;
        Uri url;

        public Favorite(string name, Uri url)
        {
            this.name = name;
            this.url = url;
        }

        public string Name
        {
            get { return name.ToString(); }
            set { name = value; }
        }

        public Uri URL
        {
            get { return url; }
            set { url = value; }
        }

        public void Open()
        {
            Process.Start(url.ToString());
        }

        public String toString()
        {
            return this.name + " " + this.url;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            int zahl;
            Console.WriteLine("Anzahl der zu speichernden Favoriten");
            zahl = Convert.ToInt32(Console.ReadLine());

            Favorite[] favarray = new Favorite[zahl];
            for (int i = 0; i < zahl; i++)
            {
                favarray[i] = new Favorite(Console.ReadLine(), new Uri(Console.ReadLine()));
            }

            foreach (Favorite i in favarray)
            {
                Console.WriteLine(i.toString());
            }

            Console.ReadKey();
        }
    }
Ist das so richtig wie ich das gemacht habe ?
Sagen wir mal ich habe in meinem Array 9 Objekte drin. Wie kann ich auf das 7 Objekt des Arrays zugreifen ?
 
Zuletzt bearbeitet:

Spyke

Premium-User
Über den Indexer (oder anders gesagt über die interne Elementnummer / Position im Array)

favarray[7]
Code:
Console.WriteLine(favarray[7].toString());
 
Beispiel: Ich gebe als Anzahl der zu speichernden Favoriten die Zahl 3 ein
Dann schreibe ich in das favarray [ ] z.B.
Titel Adresse
Yes | www.yes.com
No | www.no.com
maybe | www.maybe.com

Wenn ich nun aus dem Array den Titel No mit der entsprechenden Adresse haben möchte gebe ich

C#:
foreach (Favorite i in favarray)
            {
                Console.WriteLine(favarray[1].toString());
            }
Das Ergebnis lautet aber:
No | www.no.com
No | www.no.com
No | www.no.com

Wieso wird das Ergebnis so dargestellt ?
Ich möchte nur einmal den Wert haben
 

Improof

Erfahrenes Mitglied
Hi!

Wieso wird das Ergebnis so dargestellt ?
Ich möchte nur einmal den Wert haben
Ganz einfach:

Du hast drei Elemente in deinem Array mit den Indexen 0=Yes, 1=No und 2=maybe (du fängst ja bei 0 an zu Zählen bei Arrays).
In deiner foreach Schleife holst du dir jedes Element und speicherst es in der Variable i. Da du drei Elemente hast, läuft die Schleife 3 mal durch. Nun gibst du aber jedes mal den Wert von favarray[1] aus, also das 2. Element = No.

Jetzt klarer?

Wenn du also nur ein Element willst dann brauchst du natürlich auch keine foreach Schleife mehr, in der alle ausgegeben werden ;)

Gruß
Daniel