Permalänk
Medlem
Skrivet av Will Sheza C:

do { Console.WriteLine("\n Menu"); Console.WriteLine(" 1: Add a drink"); Console.WriteLine(" 2: Show your drinks"); Console.WriteLine(" 3: Total price"); Console.WriteLine(" 4: Terminate the program"); try { choice = int.Parse(Console.ReadLine()); } catch(Exception) { Console.WriteLine("Sorry you can only enter varibales not words"); break; }

har gjort så här men om jag skriver in hello skrivs alla meny alternativ ut typ empty space och att det kostar 0 kr

Det är för att du skriver ut allt i Main efter du anropat Run

sodacrate.Run(); drinkholder.print_crate(); drinkholder.calc_total(); drinkholder.add_soda();

Permalänk
Skrivet av zaibuf:

Det är för att du skriver ut allt i Main efter du anropat Run

sodacrate.Run(); drinkholder.print_crate(); drinkholder.calc_total(); drinkholder.add_soda();

okey vad ska jag göra åt att svar från menyn skrivs ut ovanför menyn?

Permalänk
Medlem
Skrivet av Will Sheza C:

okey vad ska jag göra åt att svar från menyn skrivs ut ovanför menyn?

Vad händer om du inte anropar några metoder efter run();

??

Permalänk

Soda crate sista delen

.Hej försöker få till att min kod ska sortera läsken efter namn och pris men får inte till det.Det känns som jag har uppfyllt kraven för betyget C men vill även få till sista delen för betyget A.Ta hänsyn till att mina priser inte är samma så har gjort att man kan hitta en specifik dryck så skriver programmet ut vart i läskbacken den befinner sig.

För betyget c skulle man göra detta:

1. En metod som anropas för att söka efter en flaska baserat på namn. Detta beskrivs i
läroboken och kapitel 13 (kodexempel för sökning på sidan 149). I denna metod kan man
också ha en inparameter som då är den sträng som du ska söka efter.
2. En metod som ska anropas för att sortera vektorn med läskflaskor utifrån namnet. Eftersom
alla flaskor har samma pris (för betyget C) får vi istället sortera efter hur många tecken det
finns i namnet – dvs hur långt namnet är. Själva sorteringen beskrivs i läroboken och kapitel
13 (kodexempel för sortering på sidan 159). Gör man uppgiften enligt A kan man sortera
efter pris också vilket är roligare kanske.

kraven för betyg A är.

Istället för att vektorn lagrar namn så ska nu vektorn lagra objekt som representerar flaskorna. Du
ska alltså skapa en ny klass som förslagsvis heter bottle, flaska eller något liknande.
Den nya klassen kan nu hantera fler värden för en flaska och följande värden ska finnas:
1. Namn
2. Kostnad (kostnad för flaskan i kronor)
3. Typ (Läsk, vatten eller lättöl)
Den nya klassen kan nu hantera fler värden för en flaska och följande variabler ska finnas:
4. Namn
5. Kostnad (kostnad för flaskan i kronor)
6. Typ (Läsk, vatten eller lättöl)
Notera nu också att förutsättningarna för
beräkning av genomsnittligt pris förändras
eftersom flaskorna kan ha olika pris.
Konstruktor (svår)
För en guldstjärna i uppgiften ska du sätta
variablerna i klassen soda och sodacrate som
privata och skapa en korrekt konstruktor (för
klassen soda) samt andra nödvändiga metoder som för att exempelvis returnera pris.

namespace SodaCrateFinal { class MainClass { public class Soda { private string name; private int price; public string Name { get { return name; } set { name = value; } } public int Price { get { return price; } set { price = value; } } public Soda(string _name, int _price) { name = _name; price = _price; } } class Sodacrate { private Soda[] Bottles; private int Amount_Drinks = 0; public Sodacrate() { Bottles = new Soda[24]; } public void Run() { Console.WriteLine("Hello and welcome to soda crate!"); Console.WriteLine("In this program you will assemble your own soda crate with all your favourite drinks"); Console.WriteLine("What would you like to do first?"); int choice = 0; do { Console.WriteLine("\n Menu"); Console.WriteLine(" 1: Add a drink"); Console.WriteLine(" 2: Show your drinks"); Console.WriteLine(" 3: Total price"); Console.WriteLine(" 4: Find soda by name"); Console.WriteLine(" 5: Sort sodas"); Console.WriteLine(" 6: Terminate the program"); choice = int.Parse(Console.ReadLine()); switch (choice) { case 1: add_soda(); break; case 2: print_crate(); break; case 3: calc_total(); break; case 4: Find_SodaName(); break; case 5: Sort_Sodabyprice(); break; case 6: Sort_SodabyName(); break; case 7: Console.WriteLine("Program terminated"); Environment.Exit(0); break; default: Console.WriteLine("Sorry this choice is not available"); break; } } while (choice != 0); } public void add_soda() { Console.WriteLine("Choose a drink to add to your trolley"); Console.WriteLine("1. Redbull,", "Energy drink"); Console.WriteLine("2. Coca cola,", "Energy drink"); Console.WriteLine("3. Ramlösa,", "Mineral Water"); Console.WriteLine("4. Peroni,", "Beer"); Console.WriteLine("5. Guiness,", "Beer"); Console.WriteLine("6. Pepsi Max,", "Energy drink"); Console.WriteLine("7. Monster drink,", "Energy drink"); Console.WriteLine("8. Powerking,", "Energy drink"); Console.WriteLine("9. Fanta,", "Energy drink"); Console.WriteLine("10. 7-up,", "Energy drink"); int input = 0; for (int i = 0; i < Bottles.Length; i++) { while (!int.TryParse(Console.ReadLine(), out input) || !(input <= 10 && input >= 1)) { Console.WriteLine("Sorry invalid choice"); } switch (input) { case 1: Console.WriteLine("Red bull has been added"); Bottles[Amount_Drinks] = new Soda("Redbull", 10); Amount_Drinks++; break; case 2: Console.WriteLine("Coca cola has been added"); Bottles[Amount_Drinks] = new Soda("Coca cola", 15); Amount_Drinks++; break; case 3: Console.WriteLine("water has been added"); Bottles[Amount_Drinks] = new Soda("water", 8); Amount_Drinks++; break; case 4: Console.WriteLine("Peroni has been added"); Bottles[Amount_Drinks] = new Soda("Peroni", 10); Amount_Drinks++; break; case 5: Console.WriteLine("Guiness has been added"); Bottles[Amount_Drinks] = new Soda("Guiness", 18); Amount_Drinks++; break; case 6: Console.WriteLine("Pepsi Max has been added"); Bottles[Amount_Drinks] = new Soda("Pepsi Max", 16); Amount_Drinks++; break; case 7: Console.WriteLine("Monster has been added"); Bottles[Amount_Drinks] = new Soda("Monster", 25); Amount_Drinks++; break; case 8: Console.WriteLine("Powerking has been added"); Bottles[Amount_Drinks] = new Soda("Powerking", 15); Amount_Drinks++; break; case 9: Console.WriteLine("Fanta has been added"); Bottles[Amount_Drinks] = new Soda("Fanta", 6); Amount_Drinks++; break; case 10: Console.WriteLine("7-Up has been added"); Bottles[Amount_Drinks] = new Soda("7-Up", 15); Amount_Drinks++; break; default: Console.WriteLine("Sorry your desired drink may not be on the list"); break; } } } public void print_crate() { for (int i = 0; i < Bottles.Length; i++) { if (Bottles[i] != null) { Console.WriteLine("Index: {0}. Name: {1}, Price: {2}", i, Bottles[i].Name, Bottles[i].Price); } else { Console.WriteLine("Empty space"); } } } public int calc_total() { int total_price = 0; foreach (var soda in Bottles) if (soda != null) total_price += soda.Price; Console.WriteLine("the total price is " + total_price + " swedish kronor"); return total_price; } public void Find_SodaName() { Console.WriteLine("PLease enter the name of the bottle you wanna find"); string Search = Console.ReadLine(); for (int i = 0; i < Bottles.Length; i++) { if (Bottles[i].Name == Search) { Console.WriteLine("'{0}' Has been placed in slot {1} in your soda crate ", Search, (i++)); break; } } } public void Sort_Sodabyprice() { int limit = Bottles.Length - 1; for (int i = 0; i < limit; i++) { } } public void Sort_SodabyName() { int limit = Bottles.Length - 1; for (int z = 0; z < Bottles.Length; z++) { } } public static void Main(string[] args) { Sodacrate drinkholder = new Sodacrate(); var sodacrate = new Sodacrate(); sodacrate.Run(); Console.Clear(); drinkholder.print_crate(); drinkholder.calc_total(); drinkholder.add_soda(); drinkholder.Find_SodaName(); drinkholder.Sort_Sodabyprice(); drinkholder.Sort_SodabyName(); Console.ReadKey(); Console.BackgroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.Black; } } } }

Permalänk

Jag vill också få till en try och catch undantag om användaren matar in fel typ av input men vet inte inte vart den ska vara.

Permalänk
Medlem

Du kan inte förvänta dig att få någon hjälp om du bara klistrar in hela skoluppgiften, sen bara en stor blob med kod utan att specificera vad som inte fungerar. Finns inte någon som orkar läsa det där. Ingen kommer att göra skoluppgiften åt dig. Vill du ha ett A så ser du ju i kraven vad du behöver göra, bara att sätta igång.

Permalänk

okey det är denna koden som inte funkar nu.När man sortera efter namn så skrivs listan ut flera gånger.

public void Sort_SodabyName() { for (int z = 0; z < Bottles.Length; z++) { int limit = Bottles.Length - 1; for (int i = 0; i < limit; i++) { int RemainingSodas = limit - i; for (int j = 0; j < RemainingSodas; j++ ) { if (Bottles[j].Name.Length > Bottles[j + 1].Name.Length) { var temp = Bottles[j]; Bottles[j] = Bottles[j + 1]; Bottles[j + 1] = temp; } } } for (int i = 0; i < Bottles.Length; i++) { Console.WriteLine("[{0,2}]: {1} innehåller {2} bokstäver.", (i + 1), Bottles[i].Name, Bottles[i].Name.Length); } } } public void Sort_Sodabyprice()//namn,kostnad,typ { int Limit = Bottles.Length - 1; for (int i = 0; i < Limit; i++) { int RemainingSodas = Limit - i; for (int j = 0; j < RemainingSodas; j++) { if (Bottles[j].Price > Bottles[j + 1].Price || Bottles[j + 1] == null) break; // Når inre loopen ett tomt värde ska den avslutas, annars blir det NullReferenceException { var temp = Bottles[j]; Bottles[j] = Bottles[j+ 1]; Bottles[j + 1] = temp; } } } for (int i = 0; i< Bottles.Length;i++) { Console.WriteLine("{0}-flaskan kostar {1} kr.", Bottles[i].Name, Bottles[i].Price); } }

Permalänk
Medlem

Ska du sortera på bokstavsordning eller längden på namnet?

När du ska sortera en lista finns det flera sätt. Ett enkelt sätt är att du först skapar en ny lista med samma längd och sedan stoppar in flaskorna en efter en. Välj därefter rätt flaska och stoppa in i din nya lista. När du nått slutet är din nya lista sorterad. För denna lösning behöver du bara tänka på hur du ska hitta rätt flaska. Om du ritar på papper så kommer du nog inse hur du ska gå igenom den fyllda listan för att alltid sluta med en sorterad lista.

Lite allmänna tips är att du borde försöka undvika att ha flera nästlade for-loopar och minska på tomma rader.

Permalänk
Medlem

@Will Sheza C: Du gör det svårare för dig själv genom att använda Bottles.Length överallt, du behöver bara bry dig om hur lång arrayen faktiskt är när du lägger till nya flaskor. På alla andra ställen bör du använda Amount_Drinks-variabeln istället för att bara loopa över de fyllda platserna.

Orsaken till att du får flera utskrifter är för övrigt p.g.a. att du formaterat din kod slarvigt och missat var dina for-loopar slutar, så din utskrift ligger inne i en av sorterings-looparna. Försök att vara mer noggrann med hur du indenterar din kod så att { och matchande } hamnar på samma indentering, att skriva "snygg" kod är faktiskt väldigt viktigt för att undvika onödiga misstag.

Permalänk
Skrivet av perost:

@Will Sheza C: Du gör det svårare för dig själv genom att använda Bottles.Length överallt, du behöver bara bry dig om hur lång arrayen faktiskt är när du lägger till nya flaskor. På alla andra ställen bör du använda Amount_Drinks-variabeln istället för att bara loopa över de fyllda platserna.

Orsaken till att du får flera utskrifter är för övrigt p.g.a. att du formaterat din kod slarvigt och missat var dina for-loopar slutar, så din utskrift ligger inne i en av sorterings-looparna. Försök att vara mer noggrann med hur du indenterar din kod så att { och matchande } hamnar på samma indentering, att skriva "snygg" kod är faktiskt väldigt viktigt för att undvika onödiga misstag.

okey tack ska kolla på det.ska använda amountdrink istället och försöka snygga till koden och kolla över min indentering på mina loopar.Fick till det nu att den bara skriver ut 2 gånger

Permalänk
Moderator
Brons i quiz

*Trådar sammanfogade*

@Will Sheza C, Fortsätt på samma tråd i framtiden!

/Vzano, Moderator

Visa signatur

Citera om du vill ha svar!
Tycker du om sidospår? :D Besök The Wiki Game
Har du fråga angående modereringen? PM till Moderatorerna eller Kontaktformulär