我对编程非常陌生,我正在为我上的课程设计一个项目。它大多数都能工作,但这是我无法解决的最后一件事。问题是战斗柜台。我真的不明白这是怎么回事,但它给出了例外
系统索引超出范围
当我尝试在add_soda方法中添加苏打水时。
当我更改bottleCounter = 1时,它可以工作。但是随后计数出错。 (对不起我的英语不好,但我希望你能理解我的意思)
namespace Slutprojekt_SODACRATE
{
class Bottles //Klassen Bottles för att hantera värden av en flaska
{
public string name { get; set; } //använder mig av automatiska propertys
public int price { get; set; }
public string type { get; set; }
}
class Sodacrate
{
public Bottles[] sodaCrate = new Bottles[24]; //skapar vektor som håller flaskorna
public int bottleCounter = 0; //Håller reda på antal flaskor
public void Run()
{
Console.WriteLine("Välkommen till den fantastiska läskback-simulatorn!");
int temp = 0;
do
{
Console.WriteLine("Välj ett alternativ:");
Console.WriteLine("[1] Lägg till en flaska i backen");
Console.WriteLine("[2] Skriv ut allt innehåll i backen");
Console.WriteLine("[3] Beräkna totala värdet av backen");
Console.WriteLine("[4] Sök efter en flaska");
Console.WriteLine("[5] Sortera flaskorna efter pris");
Console.WriteLine("[0] Avsluta programmet");
try
{
temp = int.Parse(Console.ReadLine());
}
catch
{
Console.WriteLine("Mata endast in heltal. Försök igen: ");
temp = int.Parse(Console.ReadLine());
}
switch (temp)
{
case 1:
add_soda();
break;
case 2:
print_crate();
break;
case 3:
calc_total();
break;
case 4:
Console.WriteLine("Skriv in namet på flaskan: ");
var position = find_soda(Console.ReadLine());
if (position == 0)
Console.WriteLine("Finns ej i listan.");
else if (position == 1)
Console.WriteLine("Backen är tom");
else
Console.WriteLine("Flaskan finns på plats " + position);
break;
case 5:
sort_sodas();
break;
case 0:
Console.WriteLine("Programmet avslutas");
temp = 0;
break;
case 99: //detta är inget som användaren ska använda utan är till för att kunna testköra programmet
Console.WriteLine("Array Fill");
fillArray();
break;
default:
Console.WriteLine("Felaktig inmatning. Försök igen: ");
break;
}
}
while (temp != 0);
}
private void add_soda()
{
counter();
if (bottleCounter > 23)
{
//Om backen är full frågar vi vilken plats man vill byta ut
Console.WriteLine("Läskbacken är full. Vilken flaska vill du ta bort? Välj en plats mellan 1 och 24.");
Console.WriteLine("Vill du veta vad du har i backen. Skriv \"Titta\"."); //Ger användaren möjlighet att se vad som finns i backen
string input = Console.ReadLine();
if (input == "Titta")
{
print_crate(); //använder metoden print crate för att skriva ut allt innehåll
Console.WriteLine("Vilken flaska vill du ta bort? Välj en plats mellan 1 och 24.");
input = Console.ReadLine();
}
int bottlePosition = int.Parse(input);
sodaCrate[bottlePosition - 1] = null;
Bottles bottle = new Bottles(); //Skapar ett objekt från klassen Bottles
Console.WriteLine("Skriv in namnet på vilken flaska du vill lägga till: ");
bottle.name = Console.ReadLine();
Console.WriteLine("Skriv in vad flaskan har för pris (kr): ");
bottle.price = int.Parse(Console.ReadLine());
Console.WriteLine("Skriv in om flaskan är läsk, öl eller vatten: ");
bottle.type = Console.ReadLine();
sodaCrate[bottlePosition - 1] = bottle; //flaskan är nu tillagd med önskade egenskaper och vi placerar den på önskad plats i back-vektorn
}
else
{
//om backen har tomma platser lägger vi in en flaska direkt
Console.WriteLine("Skriv in namnet på vilken flaska du vill lägga till: ");
Bottles bottle = new Bottles(); //Skapar ett objekt från klassen Bottles
bottle.name = Console.ReadLine();
Console.WriteLine("Skriv in vad flaskan har för pris (kr): ");
int inputPrice = int.Parse(Console.ReadLine());
bottle.price = inputPrice;
Console.WriteLine("Skriv in om flaskan är läsk, öl eller vatten: ");
bottle.type = Console.ReadLine();
sodaCrate[bottleCounter - 1] = bottle;
bottleCounter++;
}
}
private void print_crate() //Metod som skriver ut alla flaskor i vektorn
{
counter();
foreach (var bottle in sodaCrate)
{
if (bottle != null)
Console.WriteLine("Namn: " + bottle.name + ". Pris: " + bottle.price + ". Typ: " + bottle.type + ".");
else
Console.WriteLine("Tom plats");
}
}
private void calc_total() //Metod som räknar ut det sammanlagda priset för alla flaskor i backen
{
counter();
var totalValue = 0;
foreach (var bottle in sodaCrate)
{
if (bottle != null)
totalValue = totalValue + bottle.price;
}
Console.WriteLine("Total värde: " + totalValue + " kr");
}
private int find_soda(string name) //Metod som söker efter en flaskas namn som sedan returnerar platsen
{
counter();
if (bottleCounter > 0)
{
for (int i = 1; i < sodaCrate.Length; i++)
{
if (sodaCrate[i].name == name)
return i + 1;
}
return 0;
}
else
return 1;
}
public void sort_sodas() //Metod som sorterar elementen efter pris
{
counter();
int max = sodaCrate.Length - 1;
for (int i = 0; i < max; i++) //skapar en yttre loop som går igenom hela vektorn
{
int nrLeft = max - 1; // antal element som inte redan sorterats
for (int j = 0; j < nrLeft; j++)
{
if (sodaCrate[j].price > sodaCrate[j + 1].price)
{
//byter plats på flaskornas pris
Bottles temp = sodaCrate[j];
sodaCrate[j] = sodaCrate[j + 1];
sodaCrate[j + 1] = temp;
}
}
}
//Skriver ut att flaskorna är sorterade
Console.WriteLine("Flaskorna är nu sorterade efter pris");
}
//Skapar här en metod för att direkt fylla backen med flaskor. Detta för att kunna testköra programmet. Inget som användaren ska använda.
private void fillArray()
{
counter();
for (int i = 1; i <= sodaCrate.Length; i++)
{
Bottles bottle = new Bottles();
bottle.name = "läsk nr " + i;
bottle.price = i; //sätter priset till i eftersom det inte spelar så stor roll vad flaskan får för pris
bottle.type = "exempeltyp";
sodaCrate[bottleCounter - 1] = bottle;
bottleCounter++;
}
}
}
class Program
{
static void Main(string[] args)
{
var sodacrate = new Sodacrate(); //Skapar ett objekt av klassen Sodacrate
sodacrate.Run(); //anropar metoden run för att starta programmet och visa menyn
Console.Write("Press any key to continue . . . ");
Console.ReadKey();
}
}
}