我为代码中的swdish 名称道歉。 我正在尝试制作一个程序,要求用户选择苏打水,然后是瓶子的数量。 用户应该能够做出选择,直到数量达到 24 瓶。
当我运行我的代码时,我可以做出一两个选择,然后程序退出。
这是我今晚需要交的作业,所以我现在压力很大。
我不希望你给出解决方案,但请指出正确的方向。
一切顺利!
我的代码:
Console.WriteLine("Välj läsk att lägga till i backen:");
Console.WriteLine("1. Coca Cola");
Console.WriteLine("2. Fanta");
Console.WriteLine("3. Sprite");
Console.WriteLine("4. Red bull");
Console.WriteLine("5. Ramlösa");
Console.WriteLine("6. Hallonsoda");
int menyVal = Convert.ToInt32(Console.ReadLine());
int antalLäsk = 0;
do
{
if (menyVal == 1)
{
Console.Clear();
Console.WriteLine("Du har lagt till Coca Cola i backen!");
Console.WriteLine("Hur många vill du lägga till?");
antalLäsk = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Du har lagt till" + antalLäsk);
Console.ReadKey();
return;
}
else if (menyVal == 2)
{
Console.Clear();
Console.WriteLine("Du har lagt till Fanta i backen!");
Console.WriteLine("Hur många vill du lägga till?");
antalLäsk = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Du har lagt till" + antalLäsk);
Console.ReadKey();
return;
}
else if (menyVal == 3)
{
Console.Clear();
Console.WriteLine("Du har lagt till Sprite i backen!");
Console.WriteLine("Hur många vill du lägga till?");
antalLäsk = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Du har lagt till" + antalLäsk);
Console.ReadKey();
return;
}
else if (menyVal == 4)
{
Console.Clear();
Console.WriteLine("Du har lagt till red bull i backen!");
Console.WriteLine("Hur många vill du lägga till?");
antalLäsk = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Du har lagt till" + antalLäsk);
antalLäsk++;
Console.ReadKey();
return;
}
else if (menyVal == 5)
{
Console.Clear();
Console.WriteLine("Du har lagt till ramlösa i backen!");
Console.WriteLine("Hur många vill du lägga till?");
antalLäsk = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Du har lagt till" + antalLäsk);
Console.ReadKey();
return;
}
else if (menyVal == 6)
{
Console.Clear();
Console.WriteLine("Du har lagt till Hallonsoda i backen!");
Console.WriteLine("Hur många vill du lägga till?");
antalLäsk = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Du har lagt till" + antalLäsk);
Console.ReadKey();
return;
}
else
{
Console.Clear();
Console.WriteLine("Felaktigt menyval!");
Console.ReadKey();
return;
}
} while (antalLäsk >= 24);
{
Console.Clear();
Console.WriteLine("Backen är full!");
Console.WriteLine("Programmet avslutas!");
Console.ReadKey();
}
答案 0 :(得分:0)
在 while
循环中,您应该像在 if 语句中一样要求用户输入。
menyVal = Convert.ToInt32(Console.ReadLine());
此外,对于每次迭代,您需要将 +1 添加到 antalLäsk,而不是通过分配用户键入的输出来覆盖其值。
最后,第二次运行它不会运行“do”语句,它只会运行while语句。为了修复它,您可以切换到 for
循环(无需执行),然后您可以使用索引计数器代替 antalLäsk
。
for (int i = 0; i <= 24; i++)
{
...
}
答案 1 :(得分:0)
您在每个需要删除的 if 块中添加了 return 语句。 此外,您可能希望单独显示瓶子的数量。 所以存储来自每个的用户输入
Convert.ToInt32(Console.ReadLine());
到一个不同的变量,而不是 antalLäsk 然后添加它的值,比如
var userInput = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Du har lagt till" + antalLäsk);
antalLäsk += userInput;
最重要的是你的循环在不正确的条件下工作 下面是
(antalLäsk >= 24);
应该
(antalLäsk < 24);
而且看起来你希望菜单每次都改变,所以这个语句应该在 do 块中。
Console.WriteLine("Välj läsk att lägga till i backen:");
Console.WriteLine("1. Coca Cola");
Console.WriteLine("2. Fanta");
Console.WriteLine("3. Sprite");
Console.WriteLine("4. Red bull");
Console.WriteLine("5. Ramlösa");
Console.WriteLine("6. Hallonsoda");
int menyVal = Convert.ToInt32(Console.ReadLine());
所以你更新的代码应该是,虽然这可以重构,但对你来说已经足够了:
do
{
Console.WriteLine("Välj läsk att lägga till i backen:");
Console.WriteLine("1. Coca Cola");
Console.WriteLine("2. Fanta");
Console.WriteLine("3. Sprite");
Console.WriteLine("4. Red bull");
Console.WriteLine("5. Ramlösa");
Console.WriteLine("6. Hallonsoda");
int menyVal = Convert.ToInt32(Console.ReadLine());
if (menyVal == 1)
{
Console.Clear();
Console.WriteLine("Du har lagt till Coca Cola i backen!");
Console.WriteLine("Hur många vill du lägga till?");
var userInput = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Du har lagt till" + antalLäsk);
antalLäsk += userInput;
Console.ReadKey();
}
else if (menyVal == 2)
{
Console.Clear();
Console.WriteLine("Du har lagt till Fanta i backen!");
Console.WriteLine("Hur många vill du lägga till?");
var userInput = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Du har lagt till" + userInput);
antalLäsk += userInput;
Console.ReadKey();
}
else if (menyVal == 3)
{
Console.Clear();
Console.WriteLine("Du har lagt till Sprite i backen!");
Console.WriteLine("Hur många vill du lägga till?");
var userInput = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Du har lagt till" + antalLäsk);
antalLäsk += userInput;
Console.ReadKey();
}
else if (menyVal == 4)
{
Console.Clear();
Console.WriteLine("Du har lagt till red bull i backen!");
Console.WriteLine("Hur många vill du lägga till?");
var userInput = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Du har lagt till" + antalLäsk);
antalLäsk += userInput;
Console.ReadKey();
}
else if (menyVal == 5)
{
Console.Clear();
Console.WriteLine("Du har lagt till ramlösa i backen!");
Console.WriteLine("Hur många vill du lägga till?");
var userInput = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Du har lagt till" + antalLäsk);
antalLäsk += userInput;
Console.ReadKey();
}
else if (menyVal == 6)
{
Console.Clear();
Console.WriteLine("Du har lagt till Hallonsoda i backen!");
Console.WriteLine("Hur många vill du lägga till?");
var userInput = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Du har lagt till" + antalLäsk);
antalLäsk += userInput;
Console.ReadKey();
}
else
{
Console.Clear();
Console.WriteLine("Felaktigt menyval!");
Console.ReadKey();
}
} while (antalLäsk < 24);
{
Console.Clear();
Console.WriteLine("Backen är full!");
Console.WriteLine("Programmet avslutas!");
Console.ReadKey();
}
答案 2 :(得分:0)
我稍微修改了您的代码,使用 int.TryParse
添加了一些控制台输入检查,并删除了每个 Console.WriteLine
/if
子句中不必要的 if else
重复。此外,您必须对 antalLäsk
的控制台输入的值求和,就像对 antalLäsk += amount;
所做的那样,而 while 条件应为 while (antalLäsk <= 24)
。
static void Main(string[] args)
{
int menyVal = 0;
int antalLäsk = 0;
int amount = 0;
do
{
Console.Clear();
Console.WriteLine("Välj läsk att lägga till i backen:");
Console.WriteLine("1. Coca Cola");
Console.WriteLine("2. Fanta");
Console.WriteLine("3. Sprite");
Console.WriteLine("4. Red bull");
Console.WriteLine("5. Ramlösa");
Console.WriteLine("6. Hallonsoda");
if (int.TryParse(Console.ReadLine(), out menyVal))
{
Console.Clear();
if (menyVal == 1)
{
Console.WriteLine("Du har lagt till Coca Cola i backen!");
}
else if (menyVal == 2)
{
Console.WriteLine("Du har lagt till Fanta i backen!");
}
else if (menyVal == 3)
{
Console.WriteLine("Du har lagt till Sprite i backen!");
}
else if (menyVal == 4)
{
Console.WriteLine("Du har lagt till red bull i backen!");
}
else if (menyVal == 5)
{
Console.WriteLine("Du har lagt till ramlösa i backen!");
}
else if (menyVal == 6)
{
Console.WriteLine("Du har lagt till Hallonsoda i backen!");
}
else
{
Console.WriteLine("Wrong input! Try again");
Console.ReadKey();
continue;
}
Console.WriteLine("Hur många vill du lägga till?");
while (!int.TryParse(Console.ReadLine(), out amount))
{
Console.WriteLine("Wrong input! Try again");
Console.WriteLine("Hur många vill du lägga till?");
}
antalLäsk += amount;
Console.WriteLine("Du har lagt till " + antalLäsk);
Console.ReadKey();
}
else
{
Console.WriteLine("Felaktigt menyval!");
Console.ReadKey();
}
} while (antalLäsk <= 24);
Console.Clear();
Console.WriteLine("Backen är full!");
Console.WriteLine("Programmet avslutas!");
Console.ReadKey();
}
答案 3 :(得分:0)
请不要重复自己并保持简单(将整体拆分为较小的程序)。 首先,让我们提取数据:
// I've chosen IReadOnlyList in order to be protected from occasional
// data changing; but you can put List<string> or array (string[])
static IReadOnlyList<string> drinks = new List<string>() {
"Coca Cola",
"Fanta",
"Sprite",
"Red bull",
"Ramlösa",
"Hallonsoda",
};
然后我们可以输入:
int antalLäsk = 0;
// While we have less than 24 bottles (in total)...
while (antalLäsk <= 24) {
Console.Clear();
Console.WriteLine("Välj läsk att lägga till i backen:");
// Menu
for (int i = 0; i < drinks.Count; ++i)
Console.WriteLine($"{i + 1}. {drinks[i]}");
// User selects drink
if (!int.TryParse(Console.ReadLine(), out int menyVal) || menuVal < 1 || menuVal > drinks.Count) {
// if selection is invalid (not a integer or out of range)
Console.WriteLine("Sorry, incorrect menu position. Please, try again");
continue;
}
Console.Clear();
Console.WriteLine($"Du har lagt till {drinks[menuVal - 1]} i backen!");
Console.WriteLine("Hur många vill du lägga till?");
// User selects number of bottles, again we have to validate the input
while (!int.TryParse(Console.ReadLine(), out int bottles) || bottles < 0) {
Console.WriteLine("Invalid number of bottles, please try again");
}
antalLäsk += bottles;
Console.WriteLine($"Du har lagt till {antalLäsk}");
Console.ReadKey();
}