mboost-dp1
Find Data i Array i C#
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Jeg er meget ny til C#, vi er næsten først lige gået i gang med det i skolen.
anyways, vi har lavet en windows console app. hvor vi indtaster hvor mange mm regn der falder på nogle dage.
Vi skal også vise gennemsnittet, max og min regn der faldt.
Indtil videre er der ingen problemer, det der er problemet er ved max/min regn. Jeg vil gerne have så jeg kan sige at f.eks. dag 4, dag 7 var der der faldt max regn.
Håber det er forståelig.
anyways, vi har lavet en windows console app. hvor vi indtaster hvor mange mm regn der falder på nogle dage.
Vi skal også vise gennemsnittet, max og min regn der faldt.
Indtil videre er der ingen problemer, det der er problemet er ved max/min regn. Jeg vil gerne have så jeg kan sige at f.eks. dag 4, dag 7 var der der faldt max regn.
Håber det er forståelig.
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
namespace Regnvejr
{
class Program
{
static void Main(string[] args)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Hvor mange dage vil du indtaste nedbør over?");
int dage = Convert.ToInt16(Console.ReadLine());
double[] nedboer = new double[dage];
for (int i = 0; i < nedboer.Length; i++)
{
Console.WriteLine("Indtast nedbør for dag " + (i + 1));
nedboer[i] = Convert.ToDouble(Console.ReadLine());
}
Menu();
ConsoleKeyInfo keyinfo = new ConsoleKeyInfo();
double sum = 0;
do
{
keyinfo = Console.ReadKey(true);
Console.ForegroundColor = ConsoleColor.White;
switch (keyinfo.KeyChar)
{
case '1':
sum = 0;
for (int i = 0; i < nedboer.Length; i++)
{
sum += nedboer[i];
Console.WriteLine("Dag {0} = {1} mm", i + 1, nedboer[i]);
}
Console.ReadKey();
break;
case '2':
sum = 0;
for (int i = 0; i < nedboer.Length; i++)
{
sum += nedboer[i];
}
Console.WriteLine("Ugens gennemsnitlige nedbør er: {0} mm", sum / nedboer.Length);
Console.ReadKey();
break;
case '3':
Console.WriteLine("Max. nedbør på de " + nedboer.Length + " dage var " + nedboer.Max() + " mm");
Console.ReadKey();
break;
case '4':
Console.WriteLine("Min. nedbør på de " + nedboer.Length + " dage var " + nedboer.Min() + " mm");
Console.ReadKey();
break;
}
Menu();
}
while (keyinfo.KeyChar != 'x');
}
public static void Menu()
{
//Console.BackgroundColor = ConsoleColor.White;
Console.ForegroundColor = ConsoleColor.Green;
Console.Clear();
Console.WriteLine("|------------------------|");
Console.WriteLine(" Du kan vælge følgende:");
Console.WriteLine(" 1 Vis Skema");
Console.WriteLine(" 2 Vis Gennemsnits nedbør");
Console.WriteLine(" 3 Vis Max nedbør");
Console.WriteLine(" 4 Vis Min nedbør");
Console.WriteLine(" x Afslut");
Console.WriteLine("|------------------------|");
}
}
}
Nu vil jeg ikke skrive koden for dig, men her er hvad du bør kigge på.
Dictionary<dag, nedbør>
Dictionary<int,int> rain = new Dictionary<int,int>();
Derudover bør du parse dit nedbør til int eller double (i så fald, ændre typen af nedbør til double).
Og derudover bør du øve dig på at kode med max 80 char længde på dine linjer, det er god kodestandard!
Dictionary<dag, nedbør>
Dictionary<int,int> rain = new Dictionary<int,int>();
Derudover bør du parse dit nedbør til int eller double (i så fald, ændre typen af nedbør til double).
Og derudover bør du øve dig på at kode med max 80 char længde på dine linjer, det er god kodestandard!
Windcape (3) skrev:Eller lidt mere teknisk
enum WeekDay
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
Dictionary<WeekDay,int> rain = new Dictionary<WeekDay,int>();
// og så kan værdier sættes sådan her:
raid.add(WeekDay.Monday, 4);
Der bør nok også tages højde for at det kan ske over flere uger, så ham bør have dato/uge med.
enum WeekDay
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
Dictionary<WeekDay,week,int> rain = new Dictionary<WeekDay,week,int>();
// så du indsætter sådan
Dictionary<WeekDay,int,int> rain = new Dictionary<WeekDay,int,int>();
raid.add(WeekDay.Monday,2,4);
Pointen med den anden kode var jo at du kunne lave noget ala.Stewart (6) skrev:Jeg har bare brugt en lidt mere simpel metode (efter min mening)
Da jeg kun skal have et dag nummer:
rain[WeekDay.Monday] eller rain[0] istedet for at skulle bruge en løkke. Det er dumt at itererer over alle elementer når du netop har en list med et index.
Selvom med en regular List<T> kan du gøre det.
Nej, det kan man ikke, Dictionary er jo bare et typisk hashmap, med key=>value indexing.Jonasee (9) skrev:#7
har aldrig brugt Dictionary, så ved ikke om man kan brug 3 type, men han bør have noget til at indekere hvor i året han er.
Hvis du skal have måneder med, så ville det være meget smartere at benytte noget ala:
Dictionary<DateTime,int>
Hvor DateTime så represent en dato.
Ellers skal du ud i noget ala.
List<List<int,int>,int> altså List<List<månede,dag>,nedbør>
Nestede lists er bare så grimme, og svære at gennemskue.
Det er nok rigtigt, det er bare lidt mere af vane at jeg benytter Dictionary ligeså snart det er en fixed key, typisk fordi jeg til sådanne løsninger sjældent ville have en integer key.arne_v (8) skrev:#2
Med en key der er fortløbende int, så er List nok bedre end Dictionary.
Og i så fald, ville benytte et alm. fixed size array istedet.
Indtil videre er der ingen problemer, det der er problemetProof by contradiction!
Jeg vil gerne have så jeg kan sige at f.eks. dag 4, dag 7 var der der faldt max regn.
Console.WriteLine("dag 4, dag 7 var der der faldt max regn.");
Burde løse dit problem. Det er selvfølgelig helt okay at du ikke kendte til at Console.WriteLine kunne bruges på den måde.
Håber det er forståelig.Jaja, ingen problemer der dude, det er altid rart at være behjælpelig med andres problemer :)
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.