Permalänk

Läskbacken Programmering 1

Hejsan,

Sitter just nu och arbetar med sista uppgiften i programmering 1. Läskbacken heter uppgiften och man ska skapa ett program där man ska kunna lägga till diverse drycker i en läskback. Man ska kunna använda en rad olika funktioner men jag har fastnat på ett ställe.

Får inte riktigt till det hur jag får användarens val att registreras. När användaren väljer alternativ 1 t.ex. för att lägga till Ramlösa så kraschar programmet. Jag vet inte riktigt hur jag ska göra när jag använder en lista. Har lagt till överst för att det ska synas tydligt, men även nedan ett större kodblock. varför blir inte myList[1 tex.] Ramlösa?

for (int i =0;i < bottles.Length; i++) { if (bottles[i] == null) { addSoda--; //eftersom val 1 är läsk 1, men i vektor 0 bottles[i] = myList[addSoda]; //HÄR KRASCHAR DET break; }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace sodacrate { class Soda { private string name; private string type; private double price; public Soda(string name, string type, double price) { this.name = name; this.type = type; this.price = price; } public string Name { get { return name; } set { name = value; } } public string Type { get { return type; } set { type = value; } } public double Price { get { return price; } set { price = value; } } } class Sodacrate { private Soda[] bottles = new Soda[24]; //Vektor List<Soda> myList = new List<Soda>(); //lista public void sodasList() { myList.Add(new Soda("Ramlösa", "Mineralvatten", 5.90)); myList.Add(new Soda("Coca-Cola", "Läsk", 6.90)); myList.Add(new Soda("Coca-Cola Zero", "Läsk", 6.90)); myList.Add(new Soda("Sprite", "Läsk", 6.90)); myList.Add(new Soda("Fanta", "Läsk", 6.90)); myList.Add(new Soda("Dr. Pepper", "Läsk", 6.90)); myList.Add(new Soda("Mountain Dew", "Läsk", 6.90)); myList.Add(new Soda("Red Bull", "Energidryck", 7.90)); } public void Run() { int menu; Console.Clear(); do { Console.WriteLine("Välj ett alternativ genom att endast skriva in siffran till passande meny och klicka enter."); Console.WriteLine(" 1: Lägga till läsk"); Console.WriteLine(" 2: Ta bort läsk"); Console.WriteLine(" 3: Skriv ut läskbacken"); Console.WriteLine(" 4: Belopp på läskbacken"); Console.WriteLine(" 5: Sök efter läsk"); Console.WriteLine(" 6: Sortera läskbacken"); Console.WriteLine(" 0: Avsluta programmet"); while (true) { try { menu = int.Parse(Console.ReadLine()); break; } catch { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\nDu kan bara skriva siffor. Försök på nytt."); Console.ResetColor(); } } Console.Clear(); switch (menu){ case 1: add_soda(); break; case 2: remove_soda(); break; case 3: print_crate(); break; case 4: calc_total(); break; case 5: find_soda(); break; case 6: sort_sodas(); break; case 0: return; default: Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Du valde inget utav ovanstående alternativ. Var vänligen och försök igen.\n"); Console.ResetColor(); break; } } while (menu != 0); } public void add_soda() { int addSoda; //användarens val. T.ex. 1 ---> Lägg till Ramlösa for (int bottleInput = 0; bottleInput < bottles.Length; bottleInput++) { Console.WriteLine("Var vänligen och lägg till önskad dryck:"); Console.WriteLine("1. Lägg till Ramlösa"); Console.WriteLine("2. Lägg till Coca-Cola"); Console.WriteLine("3. Lägg till Coca-Cola Zero"); Console.WriteLine("4. Lägg till Sprite"); Console.WriteLine("5. Lägg till Fanta"); Console.WriteLine("6. Lägg till Dr. Pepper"); Console.WriteLine("7. Lägg till Mountain Dew"); Console.WriteLine("8. Lägg till Red Bull"); Console.WriteLine("0. Gå tillbaka till huvudmenyn"); while (true) { try { addSoda = int.Parse(Console.ReadLine()); break; } catch { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\nDu kan bara skriva siffor. Försök på nytt."); Console.ResetColor(); } } for (int i =0;i < bottles.Length; i++) { if (bottles[i] == null) { addSoda--; //eftersom val 1 är läsk 1, men i vektor 0 bottles[i] = myList[addSoda]; //HÄR KRASCHAR DET break; } else if (i == bottles.Length) { Console.WriteLine("Backen är redan full. Klicka på enter för att återgå till huvudmenyn"); Console.ReadLine(); Run(); } } } } class Program { public static void Main(string[] args) { //Skapar ett objekt av klassen Sodacrate som heter sodacrate Console.WriteLine("Välkommen till läsksimulatorn! Klicka på enter för att komma till huvudmenyn."); Console.ReadLine(); var sodacrate = new Sodacrate(); sodacrate.Run(); Console.WriteLine("Tryck på valfri tanget för att avsluta . . . "); Console.ReadKey(true); } } }

Visa signatur

AMD Ryzen 3600 - MSI B450 Tomahawk - Corsair 16GB (2x8GB) DDR4 3200Mhz CL16 - Palit GeForce RTX 2070 Dual 8GB - Samsung 860 Evo 1TB - Noctua NH-D15 - MPG A750GF - Fractal Design Define R5

Permalänk
Medlem

@Pellefant: myList är tom, därför kraschar det när du försöker läsa ut ett värde på ett index som inte finns.

Visa signatur

AMD Ryzen 7 1700X 3.8 GHz 20MB | ASUS PRIME X370-PRO | MSI GeForce GTX 1080 Gaming X 8GB | G.Skill 16GB DDR4 3200 MHz CL14 Flare X | Corsair RM650x 650W

Permalänk
Hedersmedlem

Ditt program är inte komplett. Saknas några funktioner remove_soda() etc.

Vad får du för felmeddelande?

Permalänk
Skrivet av noMad17:

@dengudomlige: myList är tom, därför kraschar det när du försöker läsa ut ett värde på ett index som inte finns.

Skrivet av pv2b:

Ditt program är inte komplett. Saknas några funktioner remove_soda() etc.

Vad får du för felmeddelande?

Jag får System.ArugmentOutofException: 'Index låg utanför intervallet. Det får inte vara negativt och måste vara mindre än mängdens storlek. Parameternamn: index'

Jag har tagit bort en del grejer för att det inte ska bli för mkt text på swec. remove_soda() är inte klar då add_soda ej fungerar ännu.

Jag trodde att jag lagt till värden ovan. Förmodar att jag måste lägga till något, men får inte riktigt ordning på det. Vart har jag gjort fel och hur kan jag ändra på det?

EDIT: Värt o notera att jag får felmeddelandendet när jag kommer dit medan jag kör programmet och ej innan. Förmodar dock att ni har koll på vart felet ligger.

Visa signatur

AMD Ryzen 3600 - MSI B450 Tomahawk - Corsair 16GB (2x8GB) DDR4 3200Mhz CL16 - Palit GeForce RTX 2070 Dual 8GB - Samsung 860 Evo 1TB - Noctua NH-D15 - MPG A750GF - Fractal Design Define R5

Permalänk
Medlem

Har du testat använda sökfunktionen? Känns som jsg ser just läskbacken varannan vecka nu.

Skickades från m.sweclockers.com

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

@Pelegrino:

Yesbox, sökte på det direkt och inte hittat någon med samma fel. De flesta verkar inte ha valt denna metod, utan endast valt att lägga in t.ex. Läsk[1]= "Ramlösa". Istället för att vektorn endast lagrar namn ska den lagra ett objekt, med namn, pris och typ. Inte riktigt fått bukt med det.

Jag får det o sitta om användaren endast väljer någon läsk och sedan att den platsen i läskbacken har namnet Ramlösa t.ex., men inte objektet Ramlösa med namn, typ och pris.

Visa signatur

AMD Ryzen 3600 - MSI B450 Tomahawk - Corsair 16GB (2x8GB) DDR4 3200Mhz CL16 - Palit GeForce RTX 2070 Dual 8GB - Samsung 860 Evo 1TB - Noctua NH-D15 - MPG A750GF - Fractal Design Define R5

Permalänk
Medlem
Skrivet av Pellefant:

@Pelegrino:

Yesbox, sökte på det direkt och inte hittat någon med samma fel. De flesta verkar inte ha valt denna metod, utan endast valt att lägga in t.ex. Läsk[1]= "Ramlösa". Istället för att vektorn endast lagrar namn ska den lagra ett objekt, med namn, pris och typ. Inte riktigt fått bukt med det.

Jag får det o sitta om användaren endast väljer någon läsk och sedan att den platsen i läskbacken har namnet Ramlösa t.ex., men inte objektet Ramlösa med namn, typ och pris.

Sitter på mobilen och är astrött så ha lite överseende men du kallar aldrig på SodasList, dvs metoden som bygger listan?

Det är troligtvis därför du får din error för du försöker hämta läsk ur en tom lista. Lägg in det i constructorn på ditt objekt eller bygg den i mainmetoden innan du kör run.
Skickades från m.sweclockers.com

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
Hedersmedlem

Du fyller myList i sodaslist() men den anropas aldrig?

Skickades från m.sweclockers.com

Permalänk
Medlem

if (bottles[i] == null) { addSoda--; //eftersom val 1 är läsk 1, men i vektor 0 bottles[i] = myList[addSoda]; //HÄR KRASCHAR DET break; }

Som nämns tidigare så krashar det då myList inte har några element än.

public void sodasList() { myList.Add(new Soda("Ramlösa", "Mineralvatten", 5.90)); myList.Add(new Soda("Coca-Cola", "Läsk", 6.90)); myList.Add(new Soda("Coca-Cola Zero", "Läsk", 6.90)); myList.Add(new Soda("Sprite", "Läsk", 6.90)); myList.Add(new Soda("Fanta", "Läsk", 6.90)); myList.Add(new Soda("Dr. Pepper", "Läsk", 6.90)); myList.Add(new Soda("Mountain Dew", "Läsk", 6.90)); myList.Add(new Soda("Red Bull", "Energidryck", 7.90)); }

Denna metod körs inte någonstans vad jag kan se. Vilket kan förklara varför du får det felet du får.
Prova gör om denna metod till en konstruktormetod.

https://docs.microsoft.com/en-us/dotnet/csharp/programming-gu...

Permalänk

@Pelegrino, @pv2b, @elBenko

Stort tack ska ni ha! Ja det stämde att jag aldrig hade fyllt listan. Valde att göra detta nu genom att skriva ut sodacrate.sodasList(); i min Main. Nu fungerar listan, men jag får fortfarande det inte att fungera korrekt.

Nu kraschar inte programmet, men om jag lägger in t.ex. Ramlösa genom att klicka nummer 1, blir det endast sodacrate.Soda registrerat. När jag väljer att kolla igenom mina läskfack säger alla påfyllda platser samma sak, oavsett dryck jag väljer. Det stämmer inte om användaren skriver in myList[1] så väljs det första objektet i min lista, vilket är Ramlösa? Hur får jag det att bli så?

Visa signatur

AMD Ryzen 3600 - MSI B450 Tomahawk - Corsair 16GB (2x8GB) DDR4 3200Mhz CL16 - Palit GeForce RTX 2070 Dual 8GB - Samsung 860 Evo 1TB - Noctua NH-D15 - MPG A750GF - Fractal Design Define R5

Permalänk
Hedersmedlem
Skrivet av Pellefant:

@Pelegrino, @pv2b, @elBenko

Stort tack ska ni ha! Ja det stämde att jag aldrig hade fyllt listan. Valde att göra detta nu genom att skriva ut sodacrate.sodasList(); i min Main. Nu fungerar listan, men jag får fortfarande det inte att fungera korrekt.

Nu kraschar inte programmet, men om jag lägger in t.ex. Ramlösa genom att klicka nummer 1, blir det endast sodacrate.Soda registrerat. När jag väljer att kolla igenom mina läskfack säger alla påfyllda platser samma sak, oavsett dryck jag väljer. Det stämmer inte om användaren skriver in myList[1] så väljs det första objektet i min lista, vilket är Ramlösa? Hur får jag det att bli så?

Problemet är ju att du skriver ut själva soda-objektet. Inte namnet på läsken.

Permalänk
Skrivet av pv2b:

Problemet är ju att du skriver ut själva soda-objektet. Inte namnet på läsken.

Misstänkte det, men inte riktigt fått bukt på hur jag anropar endast namnet eller om jag endast skulle vilja anropa typen av läsk t.ex. i detta fall.

Visa signatur

AMD Ryzen 3600 - MSI B450 Tomahawk - Corsair 16GB (2x8GB) DDR4 3200Mhz CL16 - Palit GeForce RTX 2070 Dual 8GB - Samsung 860 Evo 1TB - Noctua NH-D15 - MPG A750GF - Fractal Design Define R5

Permalänk
Medlem
Skrivet av Pellefant:

Misstänkte det, men inte riktigt fått bukt på hur jag anropar endast namnet eller om jag endast skulle vilja anropa typen av läsk t.ex. i detta fall.

Testa skriva över toString i Soda-klassen, ex:

using System; public class Object2 { private object value; public Object2(object value) { this.value = value; } public override string ToString() { return base.ToString() + ": " + value.ToString(); } } public class Example { public static void Main() { Object2 obj2 = new Object2('a'); Console.WriteLine(obj2.ToString()); } } // The example displays the following output: // Object2: a

Notera att du behöver inte skriva ut obj2.ToString(), skriver du endast obj2 kommer den automatiskt kalla på ToString. Jag kan ha fel då detta är det jag brukar göra i Java men antar samma gäller i C#.

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
Hedersmedlem
Skrivet av Pellefant:

Misstänkte det, men inte riktigt fått bukt på hur jag anropar endast namnet eller om jag endast skulle vilja anropa typen av läsk t.ex. i detta fall.

soda.name istället för soda

Permalänk
Skrivet av pv2b:

soda.name istället för soda

Testat med det också. Fungerar ej om jag skriver det heller. Skriver jag soda.name får jag upp does not exist in current context. Skriver jag det med stor bokstav Soda.name får jag upp is inaccessible due to it's protection level.

Visa signatur

AMD Ryzen 3600 - MSI B450 Tomahawk - Corsair 16GB (2x8GB) DDR4 3200Mhz CL16 - Palit GeForce RTX 2070 Dual 8GB - Samsung 860 Evo 1TB - Noctua NH-D15 - MPG A750GF - Fractal Design Define R5

Permalänk
Hedersmedlem
Skrivet av Pellefant:

Testat med det också. Fungerar ej om jag skriver det heller. Skriver jag soda.name får jag upp does not exist in current context. Skriver jag det med stor bokstav Soda.name får jag upp is inaccessible due to it's protection level.

Vad heter referensen till ditt objekt då? Koden som du frågar om har du inte lagt upp.

Permalänk
Skrivet av pv2b:

Vad heter referensen till ditt objekt då? Koden som du frågar om har du inte lagt upp.

Lägger in hela koden. Kommenterade bort resten av funktionerna som t.ex. sort_soda, calc_total etc och tog bort dem. Blir väldigt mycket text annars. I print_crate blir det just nu endast sodacrate.Soda som sagt om jag lägger till en läsk. Om jag skriver in Console.WriteLine(soda.name[1]); eller t.ex Console.Writeline(soda.name); så fungerar det ej.

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace sodacrate { class Soda { private string name; private string type; private double price; public Soda(string name, string type, double price) { this.name = name; this.type = type; this.price = price; } public string Name { get { return name; } set { name = value; } } public string Type { get { return type; } set { type = value; } } public double Price { get { return price; } set { price = value; } } } class Sodacrate { private Soda[] bottles = new Soda[24]; //Vektor private List<Soda> myList = new List<Soda>(); //lista public void sodasList() { myList.Add(new Soda("Ramlösa", "Mineralvatten", 5.90)); myList.Add(new Soda("Coca-Cola", "Läsk", 6.90)); myList.Add(new Soda("Coca-Cola Zero", "Läsk", 6.90)); myList.Add(new Soda("Sprite", "Läsk", 6.90)); myList.Add(new Soda("Fanta", "Läsk", 6.90)); myList.Add(new Soda("Dr. Pepper", "Läsk", 6.90)); myList.Add(new Soda("Mountain Dew", "Läsk", 6.90)); myList.Add(new Soda("Red Bull", "Energidryck", 7.90)); } do { Console.WriteLine("Välj ett alternativ genom att endast skriva in siffran till passande meny och klicka enter."); Console.WriteLine(" 1: Lägga till läsk"); Console.WriteLine(" 2: Ta bort läsk"); Console.WriteLine(" 3: Skriv ut läskbacken"); Console.WriteLine(" 4: Belopp på läskbacken"); Console.WriteLine(" 5: Sök efter läsk"); Console.WriteLine(" 6: Sortera läskbacken"); Console.WriteLine(" 0: Avsluta programmet"); while (true) { try { input = int.Parse(Console.ReadLine()); break; } catch { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\nDu kan bara skriva siffor. Försök på nytt."); Console.ResetColor(); } } Console.Clear(); switch (input){ case 1: add_soda(); break; case 2: remove_soda(); break; case 3: print_crate(); break; case 4: calc_total(); break; case 5: find_soda(); break; case 6: sort_sodas(); break; case 0: return; default: Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Du valde inget utav ovanstående alternativ. Var vänligen och försök igen.\n"); Console.ResetColor(); break; } } while (input != 0); } public void add_soda() { int input; //användarens val. T.ex. 1 ---> Lägg till Ramlösa for (int bottleInput = 0; bottleInput < bottles.Length; bottleInput++) { Console.WriteLine("Var vänligen och lägg till önskad dryck:"); Console.WriteLine("1. Lägg till Ramlösa"); Console.WriteLine("2. Lägg till Coca-Cola"); Console.WriteLine("3. Lägg till Coca-Cola Zero"); Console.WriteLine("4. Lägg till Sprite"); Console.WriteLine("5. Lägg till Fanta"); Console.WriteLine("6. Lägg till Dr. Pepper"); Console.WriteLine("7. Lägg till Mountain Dew"); Console.WriteLine("8. Lägg till Red Bull"); Console.WriteLine("0. Gå tillbaka till huvudmenyn"); while (true) { try { input = int.Parse(Console.ReadLine()); break; } catch { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("\nDu kan bara skriva siffor. Försök på nytt."); Console.ResetColor(); } } if(input > 0 && input < 9 ) for (int i =0;i < bottles.Length; i++) { if (bottles[i] == null) { input--; //eftersom val 1 är läsk 1, men i vektor 0 bottles[i] = myList[input]; Console.WriteLine("Du valde: " +bottles[i]); break; } else if (i == bottles.Length) { Console.WriteLine("Backen är redan full. Klicka på enter för att återgå till huvudmenyn"); Console.ReadLine(); Run(); } } else if (input == 0) { Run(); } } } public void print_crate() { foreach (var dryck in bottles) { if (dryck != null) Console.WriteLine(dryck); else Console.WriteLine("Tom plats"); } Console.WriteLine(); Console.WriteLine("Klicka på valfri tangent för att återvända till huvudmenyn"); Console.ReadLine(); //Där beskrivs hur man löser det med tomma positioner i vektorn } class Program { public static void Main(string[] args) { //Skapar ett objekt av klassen Sodacrate som heter sodacrate Console.WriteLine("Välkommen till läsksimulatorn! Klicka på enter för att komma till huvudmenyn."); Console.ReadLine(); var sodacrate = new Sodacrate(); sodacrate.sodasList(); sodacrate.Run(); Console.WriteLine("Tryck på valfri tanget för att avsluta . . . "); Console.ReadKey(true); } } }

Visa signatur

AMD Ryzen 3600 - MSI B450 Tomahawk - Corsair 16GB (2x8GB) DDR4 3200Mhz CL16 - Palit GeForce RTX 2070 Dual 8GB - Samsung 860 Evo 1TB - Noctua NH-D15 - MPG A750GF - Fractal Design Define R5

Permalänk
Hedersmedlem

Okej, men då är du ju här:

public void print_crate() { foreach (var dryck in bottles) { if (dryck != null) Console.WriteLine(dryck); else Console.WriteLine("Tom plats"); } Console.WriteLine(); Console.WriteLine("Klicka på valfri tangent för att återvända till huvudmenyn"); Console.ReadLine(); //Där beskrivs hur man löser det med tomma positioner i vektorn }

Då heter referensen till ditt Soda-objekt "dryck". Byt till dryck.name.

Tips för att undvika förvirring: Du kallar just nu en läsk för minst tre saker en "dryck", en "soda", eller en "bottle". Varl ite mer konsekvent.

Permalänk
Skrivet av pv2b:

Okej, men då är du ju här:

public void print_crate() { foreach (var dryck in bottles) { if (dryck != null) Console.WriteLine(dryck); else Console.WriteLine("Tom plats"); } Console.WriteLine(); Console.WriteLine("Klicka på valfri tangent för att återvända till huvudmenyn"); Console.ReadLine(); //Där beskrivs hur man löser det med tomma positioner i vektorn }

Då heter referensen till ditt Soda-objekt "dryck". Byt till dryck.name.

Tips för att undvika förvirring: Du kallar just nu en läsk för minst tre saker en "dryck", en "soda", eller en "bottle". Varl ite mer konsekvent.

Ska göra det!

Bytte så länge till Console.WriteLine(dryck.name) här Console.WriteLine(dryck);, men får fortfarande inaccessible to due protection level.

for (int i =0;i < bottles.Length; i++) { if (bottles[i] == null) { input--; //eftersom val 1 är läsk 1, men i vektor 0 bottles[i] = myList[input]; Console.WriteLine("Du valde: "+bottles[i]); break; } else if (i == bottles.Length) { Console.WriteLine("Backen är redan full. Klicka på enter för att återgå till huvudmenyn"); Console.ReadLine(); Run(); }

Hur får jag den här i sådana fall att visa rätt objektnamn när de valt ett alternativ?

Visa signatur

AMD Ryzen 3600 - MSI B450 Tomahawk - Corsair 16GB (2x8GB) DDR4 3200Mhz CL16 - Palit GeForce RTX 2070 Dual 8GB - Samsung 860 Evo 1TB - Noctua NH-D15 - MPG A750GF - Fractal Design Define R5

Permalänk
Hedersmedlem
Skrivet av Pellefant:

Ska göra det!

Bytte så länge till Console.WriteLine(dryck.name) här Console.WriteLine(dryck);, men får fortfarande inaccessible to due protection level.

for (int i =0;i < bottles.Length; i++) { if (bottles[i] == null) { input--; //eftersom val 1 är läsk 1, men i vektor 0 bottles[i] = myList[input]; Console.WriteLine("Du valde: "+bottles[i]); break; } else if (i == bottles.Length) { Console.WriteLine("Backen är redan full. Klicka på enter för att återgå till huvudmenyn"); Console.ReadLine(); Run(); }

Hur får jag den här i sådana fall att visa rätt objektnamn när de valt ett alternativ?

Ah, sorry. Det är C#. Jag blandade ihop programspråk.

Du ska köra Name inte name. Själva fältet name i sig är privat men propertyn Name är publik.

Permalänk
Skrivet av pv2b:

Ah, sorry. Det är C#. Jag blandade ihop programspråk.

Du ska köra Name inte name. Själva fältet name i sig är privat men propertyn Name är publik.

Du det fungerade i print_case. Fan vad härligt. Stort tack. Suttit med det hela kvällen igår och verkligen inte fått ihop det.

Hur får Console.WriteLine("Du valde: "+bottles[i]); att anropa namnet på objektet Ramlösa?

EDIT: Lägger till koden

for (int i =0;i < bottles.Length; i++) { if (bottles[i] == null) { input--; //eftersom val 1 är läsk 1, men i vektor 0 bottles[i] = myList[input]; Console.WriteLine("Du valde: "+bottles[i]); break; } else if (i == bottles.Length) { Console.WriteLine("Backen är redan full. Klicka på enter för att återgå till huvudmenyn"); Console.ReadLine(); Run(); } }

Visa signatur

AMD Ryzen 3600 - MSI B450 Tomahawk - Corsair 16GB (2x8GB) DDR4 3200Mhz CL16 - Palit GeForce RTX 2070 Dual 8GB - Samsung 860 Evo 1TB - Noctua NH-D15 - MPG A750GF - Fractal Design Define R5

Permalänk
Hedersmedlem
Skrivet av Pellefant:

Du det fungerade i print_case. Fan vad härligt. Stort tack. Suttit med det hela kvällen igår och verkligen inte fått ihop det.

Hur får Console.WriteLine("Du valde: "+bottles[i]); att anropa namnet på objektet Ramlösa?

EDIT: Lägger till koden

for (int i =0;i < bottles.Length; i++) { if (bottles[i] == null) { input--; //eftersom val 1 är läsk 1, men i vektor 0 bottles[i] = myList[input]; Console.WriteLine("Du valde: "+bottles[i]); break; } else if (i == bottles.Length) { Console.WriteLine("Backen är redan full. Klicka på enter för att återgå till huvudmenyn"); Console.ReadLine(); Run(); } }

bottles[i].Name

Permalänk
Skrivet av pv2b:

bottles[i].Name

Stort tack ska du ha som sagt! Nu vet jag hur jag anropar mina namn, pris och typen av en specifik läsk. Läser kursen på distans och det har varit väldigt tufft att få in informationen genom att endast läsa läroboken och youtube klipp. Hade behövt läsa kursen på plats känner jag.

Tänker jag helt fel i hur jag ska räkna ut det totala priset för min läskback genom denna metod? Får syntax error, value expected. Känns inte rätt eftersom jag räknar mina flaskor, men ej lägger ihop dem? Hur lägger ihop dem så att de bildar ett total pris?

Har ändrat bottles till soda btw för att det ska bli mer tydligt.

double priceCrate= 0; foreach (var soda in bottles) if (soda != null) priceCrate = Math.Round(bottles[].Price,2); Console.WriteLine("Priset på din läskback är: {0}", priceCrate); Console.ReadLine();

Visa signatur

AMD Ryzen 3600 - MSI B450 Tomahawk - Corsair 16GB (2x8GB) DDR4 3200Mhz CL16 - Palit GeForce RTX 2070 Dual 8GB - Samsung 860 Evo 1TB - Noctua NH-D15 - MPG A750GF - Fractal Design Define R5

Permalänk
Medlem
Skrivet av Pellefant:

Stort tack ska du ha som sagt! Nu vet jag hur jag anropar mina namn, pris och typen av en specifik läsk. Läser kursen på distans och det har varit väldigt tufft att få in informationen genom att endast läsa läroboken och youtube klipp. Hade behövt läsa kursen på plats känner jag.

Tänker jag helt fel i hur jag ska räkna ut det totala priset för min läskback genom denna metod? Får syntax error, value expected. Känns inte rätt eftersom jag räknar mina flaskor, men ej lägger ihop dem? Hur lägger ihop dem så att de bildar ett total pris?

Har ändrat bottles till soda btw för att det ska bli mer tydligt.

double priceCrate= 0; foreach (var soda in bottles) if (soda != null) priceCrate = Math.Round(bottles[].Price,2); Console.WriteLine("Priset på din läskback är: {0}", priceCrate); Console.ReadLine();

Du får syntaxerror eftersom du inte specifierar vilket index som du refererar till när du skriver "bottles[]".

Tänk på vad du vill göra. Du vill addera ihop respektive sodaflaskas pris vilket är det du har din loop till.
Du får då summera ihop priserna i varje loopiteration.

Sen behöver du inte avrunda priset till två decimaler eftersom priserna redan är angivna i detta format.

i pseudokod:

double priceCrate=0;
for Soda soda in bottles
priceCrate+=soda.Price;

print(priceCrate)

Permalänk

@Potatissallad:

Grymt! Det fungerade, men använde foreach istället. Stort tack!

Hur får jag jag det att visa 59,90 istället utan att använda Math.Round, 2? Utan det blir det endast 59,9.

Visa signatur

AMD Ryzen 3600 - MSI B450 Tomahawk - Corsair 16GB (2x8GB) DDR4 3200Mhz CL16 - Palit GeForce RTX 2070 Dual 8GB - Samsung 860 Evo 1TB - Noctua NH-D15 - MPG A750GF - Fractal Design Define R5

Permalänk
Medlem
Skrivet av Pellefant:

Hur får jag jag det att visa 59,90 istället utan att använda Math.Round, 2? Utan det blir det endast 59,9.

priceCrate är en double, så den kan inte representera 59,90 (eller så kan man se det som att 59,9 och 59,90 har samma flyttalsrepresentation). Att lägga till extra nollor är istället något man gör när man konverterar talet till en sträng, eftersom en sträng kan innehålla vad du vill.

Du kan använda t.ex. priceCrate.ToString("F2") för att konvertera värdet till en sträng med två decimaler ("F2" är en formatsträng).

Ett alternativ är att använda {0:F2} istället för {0} i ditt WriteLine-anrop för att inte behöva ha en temporär string-variabel bara för att lagra strängen (WriteLine anropar automatiskt ToString() på argumenten för att kunna skriva ut dem, {0:F2} talar om för WriteLine att den istället ska anropa ToString("F2") på det första argumentet).

Permalänk

Ville bara tacka er så mycket igen för hjälpen. Har inte varit så enkelt via distans att plugga, men kursen i sig var väldigt rolig! Sitta med trial and error och försöka i ett par h och sedan när koden fungerar är det definitvt tillfredsställande!

Visa signatur

AMD Ryzen 3600 - MSI B450 Tomahawk - Corsair 16GB (2x8GB) DDR4 3200Mhz CL16 - Palit GeForce RTX 2070 Dual 8GB - Samsung 860 Evo 1TB - Noctua NH-D15 - MPG A750GF - Fractal Design Define R5

Permalänk
Hedersmedlem
Skrivet av Pellefant:

@Potatissallad:

Grymt! Det fungerade, men använde foreach istället. Stort tack!

Hur får jag jag det att visa 59,90 istället utan att använda Math.Round, 2? Utan det blir det endast 59,9.

Nu är detta en aning överkurs för ditt syfte, men att representera pengabelopp med binära flyttal är ingen bra idé.

Flyttal kan inte representera t.ex. 0,1 på ett exakt sätt, precis som det inte går att representera 1/3 med decimaler på ett exakt sätt. Det blir bara en massa 0,3333333... Istället för att jag förklarar själv tipsar jag om den här artikeln: https://www.exploringbinary.com/why-0-point-1-does-not-exist-...

Det enklaste alternativet i C# är datatypen "decimal". Det är också ett slags flyttal, men där mantissan representerar decimala värdesiffror, snarare än binära. Här kan du läsa om dessa: https://docs.microsoft.com/en-us/dotnet/csharp/language-refer...

Ett annat alternativ som funkar i alla programmeringsspråk är att istället representera pengabeloppet som ett heltal räknat i öre. Ett pris på 59,90 kr representeras då som 5990 öre. När du ska skriva ut så delar du med 100 för att få fram delen som är kronor, och du tar modulo 100 för att få fram öre. I C# borde det vara rätt enkelt att skriva en klass för detta om du vill.