Frage von ANDROUDT, 47

C# Array erstellen - Wochentage und Temperatur?

Hallo,

ich habe ein kleines Problem beim erstellen eines Array. Bei dem Array sollen die Wochentage Montag bis Sonntag angezeigt werden und dann soll man zu jedem Tag eine Temperatur eintippen. Wie kann man Montag: Dienstag: Mittwoch: Donnerstag: ... anstelle von ,,Wochentage" angezeigt bekommen?

So viel habe ich schon geschafft:

public static void Main()

    {
        int anzahl = 7;
        

        int[] array = new int[anzahl];

        for (int i = 0; i < anzahl; i++)
        {

            Console.Write("{0}. Wochentag: ", i + 1);
            array[i] = Convert.ToInt32(Console.ReadLine());
        }
       
    }

Vielen Dank für Antworten.

LG

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von regex9, Community-Experte für Programmierung, 19

Ich würde ehrlich gesagt ein Dictionary erstellen. Dies ist im Grunde nichts anderes, als ein assoziatives Array, heißt, statt dem Index, kannst du einen beliebigen Typ als Key wählen. Als Key nutzt du ein Enum, welches alle Wochentage auflistet.

using System;
using System.Collections.Generic;

public class Test { private enum Days { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };
public static void Main() { var temperaturesPerWeek = new Dictionary[Days, int]{ // spitze Klammern!
{ Days.Monday, 17 }, { Days.Tuesday, 22 }, { Days.Wednesday, 10 }, { Days.Thursday, 19 }, { Days.Friday, 21 }, { Days.Saturday, 22 }, { Days.Sunday, 27 } };
foreach(var data in temperaturesPerWeek){ Console.WriteLine(data.Key.ToString() + ": " + data.Value); } } }

Statt | solltest du natürlich die Spitzen Klammern nutzen! In dem Editor von GF sind sie leider nicht erlaubt.

Um dem Dictionary nicht inital einen Wert zuweisen, gibt es entweder die Methode Add oder den Indexer:

temperaturesPerWeek[Days.Monday] = 19;

Weitere Informationen zu Dictionarys findest du in der Dokumentation von Microsoft: https://msdn.microsoft.com/de-de/library/xfhwa508(v=vs.110).aspx

Kommentar von ANDROUDT ,

Danke,

Das werde ich gleich mal Ausprobieren. 

Aber geht sowas auch mit dem Array? 

Kommentar von regex9 ,

Nein.

Du kannst höchstens in Kombination mit einem Enum arbeiten:

using System;

public class Test { private enum Weekdays { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };
public static void Main() { var days = Enum.GetValues(typeof(Weekdays)); int[] temperatures = new int[days.Length];
foreach(var day in days) { Console.WriteLine(string.Format("{0}: {1}", day.ToString(), temperatures[(int)day])); } } }
Kommentar von regex9 ,

Oder du erstellst dir ein Struct / eine Hilfsklasse, die Temperatur und Name des Wochentags speichert. Dann erstellst du ein Array, welches diesen neuen Typ aufnimmt:

using System;

public struct DayData {
public string Day;
public int Temperature;
}
public class Test
{
public static void Main()
{
DayData[] days = new DayData[] {
new DayData { Day = "Monday", Temperature = 22 },
new DayData { Day = "Tuesday", Temperature = 23 },
new DayData { Day = "Wednesday", Temperature = 19 },
new DayData { Day = "Thursday", Temperature = 22 },
new DayData { Day = "Friday", Temperature = 26 },
new DayData { Day = "Saturday", Temperature = 27 },
new DayData { Day = "Sunday", Temperature = 21 }
};
foreach(var day in days)
{
Console.WriteLine(string.Format("{0}: {1}", day.Day, day.Temperature));
}
}
}
Antwort
von ReiInDerTube123, 22

Erstelle noch ein array des typen String in dem du für jeden Wochentag, den String eines Wochentags speicherst. Außerdem "i+1" wird nicht funktionieren, da man somit über das Array Limit hinaus kommt wenn i = anzahl -1 ist.

Kommentar von ANDROUDT ,

Danke für die Antwort. :-)

Wie würde es denn dann aussehen? 

Ich habe keinen Plan wie es mit String Array gehen soll...

Kommentar von regex9 ,
using System;

public class Test { public static void Main() { string[] weekdays = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" }; int[] temperatures = new int[weekdays.Length];
for(int i = 0; temperatures.Length > i; ++i) Console.WriteLine(string.Format("{0}: {1}", weekdays[i], temperatures[i]));
} } }
Antwort
von Omnivore13, 26

Würde ich anders machen! Speicher doch deine Wochentage in einem Enum!

Montag die 0, Dienstag die 1, Sonntag die 6.

Dann nimmste dein Array und schreibst dir da die Temperaturen rein.

Dann fragst du noch ab, was im enum die (bsp:) 3 ist und dann weißt du auch den tag dazu

Kommentar von ANDROUDT ,

Vielen Dank, 

Würde es auch nur mit Array und einer Schleife gehen? 

Das mit dem Enum werde ich aber versuchen zu realisieren. 

Kommentar von Omnivore13 ,

Ja klar geht das auch. Entweder machst du eine eigene Klasse mit Wochentag und Temperatur als Eigenschaften

Oder du nimmst 2 Arrays und speicherst beides parallel

Oder du nimmst eine sortedList

Oder mit Enum probieren

Es gibt verschiedene Ansatzwege

Keine passende Antwort gefunden?

Fragen Sie die Community