(获取底部的所有c#文件)
我在班级“菜单”中列出了Pizza-objects列表。当我尝试将Pizza-class的对象添加到列表中时(我再次从菜单类中添加),我遇到了问题:
(顺便说一句,我试过翻译,但我很抱歉 - 其中一些是丹麦文作为作业的一部分 - 但上面的评论是翻译)
//add to menu
public void TilføjTilMenukort()
{
//"add element to the menu?"
Console.WriteLine("Tilføj element til menuen? j/n");
svar = char.Parse(Console.ReadLine());
if(svar == 'j')
{
//enter number
Console.WriteLine("Indtast nummer");
int newNr = int.Parse(Console.ReadLine());
//enter name
Console.WriteLine("\nIndtast navn");
string newNavn = Console.ReadLine();
//enter ingredient
Console.WriteLine("\nIndtast ingredienser adskilt med ','");
string newIngrediens = Console.ReadLine();
//enter price
Console.WriteLine("\nIndtast pris");
double newPris = double.Parse(Console.ReadLine());
//list name is "pizza on menu"
PizzaPaaMenu.Add(new Pizza(newNr, newNavn, newIngrediens, newPris));
}
}
就好像将对象添加到列表中一样,因为在此之后我调用了一个写入列表中每个元素的方法 - 它出现在列表中!:
//show menu
public void VisMenu()
{
Console.WriteLine("Menu:\n");
foreach (Pizza p in PizzaPaaMenu)
{
Console.WriteLine("{0}. {1} - {2} - {3} kr.\n", p.Nr, p.PizzaNavn, p.Ingrediens, p.Pris);
}
}
但是当我尝试从另一个类(命令)中运行另一个方法之后 - 它会一直返回该行说没有找到披萨:
Console.WriteLine("\nPizzaen med nr. " + bestilNummer + " blev ikke fundet!");
..在这段代码中进一步发现:
//create order
public void OpretBestilling()
{
do
{
//"which number from the menu do you want?"
Console.WriteLine("\nHvilket nummer fra menuen ønsker du at bestille?");
//orderNumber
int bestilNummer = int.Parse(Console.ReadLine());
//orderPizza
Pizza bestiltPizza = null;
Menukort menukort = new Menukort();
//The pizzas is searched through for the pizza with number "bestilNummer"("orderNumber")),
foreach (Pizza p in menukort.PizzaPaaMenu)
{
if (p.Nr == bestilNummer)
{
//if it is found in the list "PizzaPaaMenu", "bestiltPizza" points to the pizza being added (pizza p)
bestiltPizza = p;
break;
}
}
//if it is a "real" pizza (not null / p), it gets added to the list "BestillingsListe" ("order-list")
if (bestiltPizza != null)
{
BestillingsListe.Add(bestiltPizza);
//"the pizza is added to your order"
Console.WriteLine("\n" + bestiltPizza.PizzaNavn + " er tilføjet til bestillingen");
//"do you wish to order more?"
Console.WriteLine("\nØnsker du at bestille mere? j/n");
done = char.Parse(Console.ReadLine());
}else{
//"Pizza x was not found"
Console.WriteLine("\nPizzaen med nr. " + bestilNummer + " blev ikke fundet!");
}
} while (done == 'j');
}
我的Main方法中的重要代码如下所示:
//should add a pizza-object to the list of pizzas in "menu"
menukort.TilføjTilMenukort();
//runs through the list of pizza-objects
menukort.VisMenu();
//"do you wish to order?"
Console.WriteLine("\nØnsker du at bestille? j/n");
charsvar = char.Parse(Console.ReadLine());
if (charsvar == 'j')
{ //creates an order by making sure, that the pizza exists in the list from "menu"
bestilling.OpretBestilling();
//shows what has been ordered
bestilling.VisBestilling();
...
谢谢!
答案 0 :(得分:1)
Bestilling
类不知道您在主程序中使用的Menukort
实例。它创建了自己的实例,这是一个单独的比萨列表,从那个你一直在使用的比萨饼。
您应该将您使用的实例发送到Menukort
类,而不是在Bestilling
类中创建Menukort menukort = new Menukort();
Bestilling bestilling = new Bestilling(menukort);
的新实例:
Bestilling
在class Bestilling
{
private Menukort menukort;
...
类中为它声明一个变量:
public Bestilling(Menukort kort) {
menukort = kort;
}
在构造函数中,您获得对实例的引用并输入变量:
{{1}}
使用您添加到类中的变量,删除创建新实例的行(342),其余代码将相同。
我们的英语观众的翻译:
Bestilling =食品订单
Menukort =菜单表