Premiär! Fyndchans i SweClockers Månadens Drop
Permalänk

Klass väder

Hej!

Jag har precis börjat med programmering så allt är helt nytt, nu har jag kört fast helt och undrar om någon vänlig själ kan hjälpa mig?

Jag får ett felmeddelande " Error CS5001: Program does not contain a static 'Main' method suitable for an entry point (CS5001) "

Jag förstår att jag måste lägga in allt in en main metod, men förstår inte var och hur?

Om ni behöver hela koden för att hjälpa, så skriv det så lägger jag in.

Tack på förhand.

Permalänk
Medlem

Ja vi behöver hela koden. Använd kod-taggar dvs code respektive /code inom hakparentes så får du det fint.

såhär

Du har heller inte sagt vilket språk du försöker med (även om det säkert går att lista ut med felmeddelandet).

Visa signatur

CPU: Ryzen 5600xGPU: 1080 TI ROG Strix RAM:2x16GB G.skill Trident @ 3600MHz MoBo: Asus B550FPSU: Corsair SF750
En resa till Nordkorea
2 dagar i Tjernobyl

Permalänk

Jag lyckades lösa det. Nu till nästa fråga, jag ska använda mig av Bubblesort i ett program som ska sortera temperaturen från olika städer som en "användare" själv får välja. Hur och vart ska jag lägga in bubblesort? Eftersom användaren själv får välja både stad och temperatur, hur ska den då räkna ut sorteringen när jag inte har siffrorna innan?

Är det något annat att påpeka så fritt fram!

using System; using System.Collections.Generic; class Stad { public string name { get; set; } public int temp { get; set; } public Stad(string name, int temp) { this.name = name; this.temp = temp; } public string Name { get { return this.name; } set { name = value; } } public int temperatur { get { return temp; } set { temp = value; } } public override string ToString() { return name + " " + temp; } } class Program { static int Linsok(List<Stad> list, int key) { for (int i = 0; i < list.Count; i++) { if (list[i].temperatur == key) return i; } return -1; } class bubblesort { static void Main(string[] args) { List<Stad> myList = new List<Stad>(); bool avsluta = false; while (!avsluta) { Console.WriteLine(""); Console.WriteLine("Goddag, vänligen välj ett alternativ nedan: "); Console.WriteLine(""); Console.Write("[L]ägg in temperatur i en ny stad\n"); Console.Write("[S]ök specifik temperatur\n"); Console.Write("[A]vsluta\n"); Console.Write("[R]esultat på temperatur i inlagda städer\n"); char menyVal; menyVal = Console.ReadLine()[0]; switch (menyVal) { case 'L': case 'l': System.Console.Write("Stadens namn: "); string namn = System.Console.ReadLine(); System.Console.Write("Ange temperatur: "); int temp = System.Convert.ToInt32(System.Console.ReadLine()); Stad stad = new Stad(namn, temp); if (temp >= 60 || temp <= -60) Console.WriteLine("felaktig temperatur"); else myList.Add(stad); break; case 'S': case 's': Console.Write("Ange den temperatur som du vill söka: "); string str = Console.ReadLine(); int key = Convert.ToInt32(str); int index = Linsok(myList, key); if (index == -1) Console.WriteLine("En stad med den här temperaturen finns inte inlagd"); else Console.WriteLine("Temperaturen: " + key + " finns i staden: " + myList[index].Name); break; case 'A': case 'a': Console.WriteLine("Du har valt att avsluta programmet"); avsluta = true; break; case 'R': case 'r': Console.WriteLine("Här är temperaturena på de inlaggda städerna: "); //Ska det läggas in här? break; default: Console.WriteLine("Någonting gick fel."); avsluta = true; break;

Permalänk

Och för att tillägga så är det C#

Permalänk
Medlem

Varför har du gjort bubblesort som en klass?
Rimligtvis borde den hellre följa samma mall som linsok.

Visa signatur

i5-7600k . GTX 1080 . 16 GB

Permalänk
Medlem
Skrivet av SWEvickan:

Jag lyckades lösa det. Nu till nästa fråga, jag ska använda mig av Bubblesort i ett program som ska sortera temperaturen från olika städer som en "användare" själv får välja. Hur och vart ska jag lägga in bubblesort? Eftersom användaren själv får välja både stad och temperatur, hur ska den då räkna ut sorteringen när jag inte har siffrorna innan?

Om det är användaren som matar in städer och temperaturer så antar jag att detta förväntas göras först, dvs användaren gör ett antal sådana inmatningar som du lägger i en lista. Sedan kan du sortera dessa på temperatur eller namn eller vad det nu är meningen att du ska sortera på.

Detta gör du ju dock redan, så jag vet inte riktigt hur du menar att du "inte har siffrorna".

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Skrivet av johanandersson:

Varför har du gjort bubblesort som en klass?
Rimligtvis borde den hellre följa samma mall som linsok.

Tack! Tagit bort det, var kvar från en kod jag provat med tidigare.

Permalänk
Skrivet av evil penguin:

Om det är användaren som matar in städer och temperaturer så antar jag att detta förväntas göras först, dvs användaren gör ett antal sådana inmatningar som du lägger i en lista. Sedan kan du sortera dessa på temperatur eller namn eller vad det nu är meningen att du ska sortera på.

Detta gör du ju dock redan, så jag vet inte riktigt hur du menar att du "inte har siffrorna".

Uppgiften går ut på att en användare ska trycka "L" och skriva in städer (hur många man vill) samt temperatur för dessa städer tex. "Stadens namn: Stockholm" "Ange temperatur: 15" osv. Sedan ska användaren kunna trycka R och då få temperaturen sorterad (kallast till varmast). Problemet och det jag inte förstår mig på är vad jag ska skriva in för att programmet ska räkna ut det, då jag inte vet vad användaren kommer att skriva in för temperatur.

Permalänk
Medlem
Skrivet av SWEvickan:

Uppgiften går ut på att en användare ska trycka "L" och skriva in städer (hur många man vill) samt temperatur för dessa städer tex. "Stadens namn: Stockholm" "Ange temperatur: 15" osv. Sedan ska användaren kunna trycka R och då få temperaturen sorterad (kallast till varmast). Problemet och det jag inte förstår mig på är vad jag ska skriva in för att programmet ska räkna ut det, då jag inte vet vad användaren kommer att skriva in för temperatur.

Om jag förstår dig rätt så har ju användaren redan matat in städer med tillhörande temperatur? Dessa finns redan i din lista när de senare trycker R?
Därav att jag inte förstår vad det är för något som du menar att du inte har.

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Skrivet av evil penguin:

Om jag förstår dig rätt så har ju användaren redan matat in städer med tillhörande temperatur? Dessa finns redan i din lista när de senare trycker R?
Därav att jag inte förstår vad det är för något som du menar att du inte har.

Exakt! Och då ska de temperaturer som användaren angivit tidigare sorteras i en lista. Jag ska enligt uppgiften använda mig av bubblesort.

Permalänk
Medlem
Skrivet av SWEvickan:

Exakt! Och då ska de temperaturer som användaren angivit tidigare sorteras i en lista. Jag ska enligt uppgiften använda mig av bubblesort.

Jo, och då har du ju iaf alla temperaturvärdena (och namnen) redan?
Jag antar att tanken är att du ska skriva ut dessa sorterade eller något sådant?

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Skrivet av evil penguin:

Jo, och då har du ju iaf alla temperaturvärdena (och namnen) redan?
Jag antar att tanken är att du ska skriva ut dessa sorterade eller något sådant?

Precis, väljer användaren R så ska endast temperaturerna skrivas ut sorterat från kallast till varmast.

Permalänk

Såhär ser det ut just nu, men den skriver inte ut resultatet på temperaturen.

class Program { static int Linsok(List<Stad> list, int key) { for (int i = 0; i < list.Count; i++) { if (list[i].temperatur == key) return i; } return -1; } static void Bubblesort(List<Stad> cities) { int max = cities.Count - 1; for (int i = 0; i < max; i++) { int nrLeft = max - i; for (int j = 0; j < nrLeft; j++) { if (cities[j].temp > cities[j + 1].temp) { Stad tmp = cities[j]; cities[j] = cities[j + 1]; cities[j + 1] = tmp; } } } } static void Main(string[] args) { List<Stad> myList = new List<Stad>(); bool avsluta = false; while (!avsluta) { Console.WriteLine(""); Console.WriteLine("Goddag, vänligen välj ett alternativ nedan: "); Console.WriteLine(""); Console.Write("[L]ägg in temperatur i en ny stad\n"); Console.Write("[S]ök specifik temperatur\n"); Console.Write("[A]vsluta\n"); Console.Write("[R]esultat på väder på inlaggda städer\n"); char menyVal; menyVal = Console.ReadLine()[0]; switch (menyVal) { case 'L': case 'l': System.Console.Write("Stadens namn: "); string namn = System.Console.ReadLine(); System.Console.Write("Ange temperatur: "); int temp = System.Convert.ToInt32(System.Console.ReadLine()); Stad stad = new Stad(namn, temp); if (temp >= 60 || temp <= -60) Console.WriteLine("felaktig temperatur"); else myList.Add(stad); break; case 'S': case 's': Console.Write("Ange den temperatur som du vill söka: "); string str = Console.ReadLine(); int key = Convert.ToInt32(str); int index = Linsok(myList, key); if (index == -1) Console.WriteLine("En stad med den här temperaturen finns inte inlagd"); else Console.WriteLine("Temperaturen: " + key + " finns i staden: " + myList[index].Name); break; case 'A': case 'a': Console.WriteLine("Du har valt att avsluta programmet"); avsluta = true; break; case 'R': case 'r': Console.WriteLine("Här är temperaturena på de inlaggda städerna: "); Bubblesort(myList); //Den skriver inte ut resultatet break; default: Console.WriteLine("Någonting gick fel."); avsluta = true; break;

Permalänk
Medlem

Din BubbleSort-funktion är void och du skriver inte ut något inne i funktionen. Det är felet. Hur du löser får du klura lite på först.

Permalänk
Skrivet av monocles:

Din BubbleSort-funktion är void och du skriver inte ut något inne i funktionen. Det är felet. Hur du löser får du klura lite på först.

Tack för tipset, jag har läst och kikat runt på sidor, men jag lyckas inte lösa det... Jag förstår i princip vad du menar, men vet inte vad som behöver skrivas/göras i min funktion.

Har du ytterligare något tips?

Permalänk
Medlem
Skrivet av SWEvickan:

Tack för tipset, jag har läst och kikat runt på sidor, men jag lyckas inte lösa det... Jag förstår i princip vad du menar, men vet inte vad som behöver skrivas/göras i min funktion.

Har du ytterligare något tips?

Problemet är nog att du förväntar dig att din Bubblesort-metod ska skriva ut listan, men det är ju en sorteringsmetod och har inget med utskrivning att göra. Den skulle kunna skriva ut listan också, men då blir den onödigt specifik och svår att återanvända. Så det är bättre att implementera en separat utskrivningsmetod som du kan anropa i Main efter att du sorterat listan.

Permalänk
Medlem
Skrivet av SWEvickan:

Tack för tipset, jag har läst och kikat runt på sidor, men jag lyckas inte lösa det... Jag förstår i princip vad du menar, men vet inte vad som behöver skrivas/göras i min funktion.

Har du ytterligare något tips?

Din Bubblesort-funktion är void så den returnerar ingenting. När du kallar på den med din lista får du alltså inget tillbaka.

Vet du hur du ska skriva ut listan? Oaktat sorteringen av listan, den påverkar inte utskriften.

Permalänk
Medlem

En sak som kan vara bra att veta är att när du skickar in din lista cities i bubblesort så ändras den BARA i bubblesort, inte utanför (globala va lokala variabler). Det innebär att du måste returnera listan. Första hjälpen till dig blir då att void ska ändras till List, resten listar du ut själv.

Citat:

Detta stämmer inte. List är en referenstyp i C#, så det är en referens till listan som skickas till funktionen och inte en kopia. Så att inte returnera listan är korrekt i det här fallet.

Andra tipset är att du behöver ej kolla både för stor och liten bokstav i switch, det ser oproffsigt ut. Istället konverterar man alltid till liten eller stor bokstav och klllar bara det, typ menyVal.toLowerCase().

Visa signatur

CPU: Ryzen 5600xGPU: 1080 TI ROG Strix RAM:2x16GB G.skill Trident @ 3600MHz MoBo: Asus B550FPSU: Corsair SF750
En resa till Nordkorea
2 dagar i Tjernobyl

Permalänk
Skrivet av monocles:

Din Bubblesort-funktion är void så den returnerar ingenting. När du kallar på den med din lista får du alltså inget tillbaka.

Vet du hur du ska skriva ut listan? Oaktat sorteringen av listan, den påverkar inte utskriften.

Första gången jag använder mig av Bubblesort och bara fått genomgång om vad den gör, men ingen genomgång över hur den ska användas, vilket gör det svårt. Finns inte heller så mycket info i böcker eller nätet hur jag ska använda mig av den vid just den här funktionen eller så förstår jag mig bara inte på det.

Kan jag stoppa in denna kod (lägger in den här) under "static void Main(string[] args)" eller blir det helt galet?

static void Bubblesort(List<Stad> List) { int max = List.Count - 1; // Kan jag ta denna for (int i = 0; i < max; i++) { int nrLeft = max - i; for (int j = 0; j < nrLeft; j++) { if (List[j].temp > List[j + 1].temp) { Stad tmp = List[j]; List[j] = List[j + 1]; List[j + 1] = tmp; // } } } } static void Main(string[] args) { //och lägga in här? List<Stad> myList = new List<Stad>(); bool avsluta = false; while (!avsluta)

Permalänk
Medlem
Skrivet av SWEvickan:

Första gången jag använder mig av Bubblesort och bara fått genomgång om vad den gör, men ingen genomgång över hur den ska användas, vilket gör det svårt. Finns inte heller så mycket info i böcker eller nätet hur jag ska använda mig av den vid just den här funktionen eller så förstår jag mig bara inte på det.

Kan jag stoppa in denna kod (lägger in den här) under "static void Main(string[] args)" eller blir det helt galet?

Vad skulle du uppnå med det? Att flytta koden kommer inte skapa en utskrift. För att skapa en utskrift behöver du bara skapa en utskrift. Du kan göra det inne i Bubblesort eller direkt i Main.

Jag har mycket liten erfarenhet av C# så strök felaktighet.
Permalänk
Medlem
Skrivet av Pelegrino:

En sak som kan vara bra att veta är att när du skickar in din lista cities i bubblesort så ändras den BARA i bubblesort, inte utanför (globala va lokala variabler). Det innebär att du måste returnera listan. Första hjälpen till dig blir då att void ska ändras till List, resten listar du ut själv.

Detta stämmer inte. List är en referenstyp i C#, så det är en referens till listan som skickas till funktionen och inte en kopia. Så att inte returnera listan är korrekt i det här fallet.

Permalänk
Skrivet av monocles:

Vad skulle du uppnå med det? Att flytta koden kommer inte skapa en utskrift. För att skapa en utskrift behöver du bara skapa en utskrift. Du kan göra det inne i Bubblesort eller direkt i Main.

Var det så enkelt... Jag lyckades lösa det, problemet nu är att det inte skrivs ut från kallast till varmast. Är min bubblesort funktion fel formulerad?

static void Bubblesort(List<Stad>Cities) { int max = Cities.Count - 1; Console.WriteLine(string.Join(", ", Cities)); for (int i = 0; i < max; i++) { int nrLeft = max - i; for (int j = 0; j < nrLeft; j++) { if (Cities[j].temp > Cities[j + 1].temp) { Stad tmp = Cities[j]; Cities[j] = Cities[j + 1]; Cities[j + 1] = tmp;

Permalänk
Hedersmedlem
Skrivet av SWEvickan:

Var det så enkelt... Jag lyckades lösa det, problemet nu är att det inte skrivs ut från kallast till varmast. Är min bubblesort funktion fel formulerad?

static void Bubblesort(List<Stad>Cities) { int max = Cities.Count - 1; Console.WriteLine(string.Join(", ", Cities)); for (int i = 0; i < max; i++) { int nrLeft = max - i; for (int j = 0; j < nrLeft; j++) { if (Cities[j].temp > Cities[j + 1].temp) { Stad tmp = Cities[j]; Cities[j] = Cities[j + 1]; Cities[j + 1] = tmp;

Bubbelsort sorterar ju elementen i antingen stigande eller fallande ordning. Det gäller att veta hur du har skrivit den. Istället för att sortera om kan du dock läsa ur listan baklänges när du skriver ut den.

https://csharpskolan.se/article/bubble-sort/

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem
Skrivet av SWEvickan:

Var det så enkelt... Jag lyckades lösa det, problemet nu är att det inte skrivs ut från kallast till varmast. Är min bubblesort funktion fel formulerad?

Tänk igenom din funktion, helst på papper. Funktionen körs uppifrån och ned. Om du kallar på funktionen med (7, 19, 2, 13), vad kommer då skrivas ut med din utskrift?

Permalänk
Hedersmedlem

Jag skulle för övrigt rekommendera dig att läsa på ordentligt om hur bubbelsort fungerar.

Att plocka kod och tekniker på nätet är vanligt när man jobbar som utvecklare, men om du tar kod som du inte vet hur den fungerar så skapar du onödig risk för dig själv, andra utvecklare som du samarbetar med samt programmets slutanvändare. Därför så är det superviktigt att läsa in och förstå precis vad som händer, samt dokumentera de delar som inte är helt självklara i sin kod.

Bubbelsort är inte allt för avancerad, så det är bra övning att läsa på om den och förstå hur det fungerar som övning inför mer avancerade uppgifter.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem
Skrivet av SWEvickan:

"Jag lyckades lösa det. Nu till nästa fråga,"

Och din lösning var vadå?
Inte för jag håller på med detta men vad är meningen med ställa en fråga rakt på sak sen bara hoppa till nästa?
Som att stressa igenom en läxa/uppgift från skolan utan att veta riktigt varför man gör uppgiften.

Visa signatur

Cpu: R5-3600 | MSI MEG X570 UNIFY | Vega64 RedDevil | Corsair 3200 Mhz 16GB | Phanteks PH-TC14PE | Chassi: R4 Arctic White | Steelseries Apex Pro | Logitech G Pro X Superlight | Steelseries Arctis 7

Permalänk
Medlem
Skrivet av perost:

Detta stämmer inte. List är en referenstyp i C#, så det är en referens till listan som skickas till funktionen och inte en kopia. Så att inte returnera listan är korrekt i det här fallet.

Var tvungen att ladda ner VS för att överbevisa dig och visade sig att du hade rätt.

Visa signatur

CPU: Ryzen 5600xGPU: 1080 TI ROG Strix RAM:2x16GB G.skill Trident @ 3600MHz MoBo: Asus B550FPSU: Corsair SF750
En resa till Nordkorea
2 dagar i Tjernobyl

Permalänk
Skrivet av Niivpzi:

Och din lösning var vadå?
Inte för jag håller på med detta men vad är meningen med ställa en fråga rakt på sak sen bara hoppa till nästa?
Som att stressa igenom en läxa/uppgift från skolan utan att veta riktigt varför man gör uppgiften.

Jag stressar absolut inte, jag har suttit med detta morgon till kväll i flera dagar. Jag läser, kollar yt och lär mig av personer som hjälper mig här. Jag ber inte om svaren, utan tips och har fått många bra tips här där jag fått lära mig genom att testa mig fram. Jag tycker detta är roligt och vill lära mig, annars skulle jag inte sökt programmet frivilligt.

Permalänk
Skrivet av giplet:

Jag skulle för övrigt rekommendera dig att läsa på ordentligt om hur bubbelsort fungerar.

Att plocka kod och tekniker på nätet är vanligt när man jobbar som utvecklare, men om du tar kod som du inte vet hur den fungerar så skapar du onödig risk för dig själv, andra utvecklare som du samarbetar med samt programmets slutanvändare. Därför så är det superviktigt att läsa in och förstå precis vad som händer, samt dokumentera de delar som inte är helt självklara i sin kod.

Bubbelsort är inte allt för avancerad, så det är bra övning att läsa på om den och förstå hur det fungerar som övning inför mer avancerade uppgifter.

Tycker faktiskt att personerna som hjälp mig här endast gett tips och inte vad jag ska skriva, jag lär mig, men allt är nytt. Som tidigare skrivet så får vi inga genomgångar från skolan då jag läser på distans, sen snappar jag inte endast upp information och tips här utan kollar genomgångar på youtube tex.

Nej det kanske inte är så avancerat för de som kan det, men jag är ny inom detta och försöker få in så mycket tips och råd från alla möjliga håll.

Permalänk

Stort tack till alla som tagit tid att hjälpa mig.