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
3 Antworten
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
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])); } } }
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));
}
}
}
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.
Danke für die Antwort. :-)
Wie würde es denn dann aussehen?
Ich habe keinen Plan wie es mit String Array gehen soll...
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]));
} } }
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
Vielen Dank,
Würde es auch nur mit Array und einer Schleife gehen?
Das mit dem Enum werde ich aber versuchen zu realisieren.
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
Danke,
Das werde ich gleich mal Ausprobieren.
Aber geht sowas auch mit dem Array?