我是C#的新手,并且在嵌套循环方面遇到了麻烦。我正在使用菜单进行分级程序。第一个菜单询问用户他们想要输入多少个等级。然后,用户输入成绩。第二个菜单计算出平均值和等级。我在嵌套循环方面遇到了麻烦,该循环会要求您输入给定时间输入成绩。
完成后,我也很难将信息传递到第二个菜单以获取平均值。我在Java中做得更好,但是在那里我们有一定的等级。然后,我们为每个年级设置一个变量。最后,我们将它们相加并除以设定的数字。
if (!$(".objectA").html()) {
$("#objectB").hide();
}
答案 0 :(得分:1)
为了使代码更易于理解,我做了一些更改。
private static void Main(string[] args)
{
ProgramLoop();
}
private static void ProgramLoop()
{
var grades = new List<double>();
double average;
var exit = false;
do
{
System.Console.WriteLine("1. Enter Grades");
System.Console.WriteLine("2. Get Average");
System.Console.WriteLine("3. My program");
System.Console.WriteLine("4. exit");
var input = System.Console.ReadLine();
System.Console.WriteLine("");
switch (input)
{
case "1":
grades = EnterGrades();
break;
case "2":
average = GetAverage(grades);
break;
case "3":
MyProgram();
break;
case "4":
exit = true;
break;
default:
System.Console.WriteLine($"'{input}' is not a valid choice.");
break;
}
}
while (exit == false);
}
private static List<double> EnterGrades()
{
int numberOfGrades = 0;
var grades = new List<double>();
System.Console.WriteLine("How many grades do you want to enter? ");
// Read number of grades
while (!int.TryParse(System.Console.ReadLine(), out numberOfGrades) || numberOfGrades < 1)
{
System.Console.WriteLine("Please enter a valid number");
}
while (grades.Count != numberOfGrades)
{
// Read grade
System.Console.WriteLine("Enter Grade: ");
double grade;
while (!double.TryParse(System.Console.ReadLine(), out grade) || grade < 0 || grade > 100)
{
System.Console.WriteLine("Please enter a valid grade between 0.0 and 100.0");
}
grades.Add(grade);
}
return grades;
}
private static double GetAverage(IList<double> grades)
{
var average = grades.Average();
if (average >= 90)
{
System.Console.WriteLine($"The average is {average}, which is an A.");
}
else if (average >= 80)
{
System.Console.WriteLine($"The average is {average}, which is an B.");
}
else if (average >= 70)
{
System.Console.WriteLine($"The average is {average}, which is an C.");
}
else if (average >= 60)
{
System.Console.WriteLine($"The average is {average}, which is an D.");
}
else
{
System.Console.WriteLine($"The average is {average}, which is an E.");
}
return average;
}
我建议您将代码拆分为方法。该代码将更易于理解,并且不将太多代码挤在一起是一个好习惯。
如果您打算添加更多功能并编写更多代码,我还建议您研究如何将面向对象的编程应用于此,即编写诸如GradeCard之类的类。
答案 1 :(得分:0)
因此,我想强调几件事,并且还在代码中添加了注释。您想在整个程序/方法中保留2个变量,以跟踪输入的所有内容。它们是2个平均值(1)总数和(2)输入数量的计数。查看代码并逐行阅读并查看注释。希望这对您有所帮助。如有疑问,请随时提问。
bool exit = false;
// added variables outside of loop so they are available everywhere in the method
double grades = 0;
int gradesCount = 0;
do
{
Console.WriteLine("1. Enter Grades");
Console.WriteLine("2. Get Average");
Console.WriteLine("3. exit");
string input = Console.ReadLine();
Console.WriteLine("");
if (input == "1")
{
int totalGrades = 0;
//User Input
Console.WriteLine("How many grades do you want to enter? ");
//While loop for TryParse
while (!int.TryParse(Console.ReadLine(), out totalGrades))
{
Console.WriteLine("Please enter a valid number");
}
// increment the count of grades by the number of grades the user wants to add
gradesCount += totalGrades;
// variable to keep a count and avoid infinite loop
int addedGradesCount = 0;
// while loop works like a for loop using our variable to keep count of grades we add
while (addedGradesCount < totalGrades)
{
Console.WriteLine("Enter Grade: ");
// variable to store entered grade
double newGrade = 0;
//Reusing code from while loop above for TryParse
while (!double.TryParse(Console.ReadLine(), out newGrade))
{
Console.WriteLine("Please enter a valid number");
}
// increment running total of grades with the user input number
grades += newGrade;
// output to user - got rid of loop through totalGrades
Console.WriteLine("You entered: " + newGrade + " - Total: " + grades);
// increment variable to keep count! if this is not here, you will have infinite loop
addedGradesCount++;
}
// Console.ReadLine(); // not needed
}
else if (input == "2")
{
// calculate average using the method variables we initialized at the beginning
double average = (grades / gradesCount);
if (average >= 90)
{
Console.WriteLine($"The average is a {average} which is an A.");
}
else if (average >= 80)
{
Console.WriteLine($"The average is a {average} which is an B.");
}
else if (average >= 70)
{
Console.WriteLine($"The average is a {average} which is an C.");
}
else if (average >= 60)
{
Console.WriteLine($"The average is a {average} which is an D.");
}
else
{
Console.WriteLine($"The average is a {average} which is an E.");
}
}
else
{
exit = true;
}
} while (exit == false);
Console.ReadKey();
答案 2 :(得分:0)
这似乎可行
PvBuffer buffer;
PvResult operationalResult;
var filename = "...some filename...";
var result = stream.RetieveBuffer(ref buffer, ref operationalResult, 100);
if(result.IsOK())
{
PvImage image = buffer.Image;
var bitmap = new System.Drawing.Bitmap(
width: (int)image.Width,
height: (int)image.Height,
format: PixelFormat.Format24bppRgb
);
image.CopyToBitmap(bitmap);
bitmap.save(filename, ImageFormat.Jpeg);
}