c# - 如何让变量 totalCredit 正确递增
问题描述
在我的程序中,我应该让用户输入课程选择,最多 3 个。我遇到的问题是,为了让切换在 3 个课程结束,它必须更新 totalCredit 的值,直到它达到 9(总共 3 门课程,每门 3 学分)。基本上,当您已经输入了 3 门课程并尝试输入第 4 门课程时,它应该从 WritePrompt 方法中输出 case -3,但它似乎根本没有更改 totalCredit 变量。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleRegisterStudent
{
class Program
{
static void Main(string[] args)
{
(new Program()).run();
}
void run()
{
int choice;
int firstChoice = 0, secondChoice = 0, thirdChoice = 0;
int totalCredit = 0;
string yesOrNo = "";
System.Console.WriteLine("Teacher's Copy");
do
{
WritePrompt();
choice = Convert.ToInt32(Console.ReadLine());
switch (ValidateChoice(choice, firstChoice, secondChoice, thirdChoice, totalCredit))
{
case -1:
Console.WriteLine("Your entered selection {0} is not a recognized course.", choice);
break;
case -2:
Console.WriteLine("You have already registerd for this {0} course.", ChoiceToCourse(choice));
break;
case -3:
Console.WriteLine("You can not register for more than 9 credit hours.");
break;
case -4:
Console.WriteLine("Registration Confirmed for course {0}.", ChoiceToCourse(choice));
totalCredit += 3;
if (firstChoice == 0)
firstChoice = choice;
else if (secondChoice == 0)
secondChoice = choice;
else if (thirdChoice == 0)
thirdChoice = choice;
break;
}
WriteCurrentRegistration(firstChoice, secondChoice, thirdChoice);
Console.Write("\nDo you want to try again? (Y|N)? : ");
yesOrNo = (Console.ReadLine()).ToUpper();
} while (yesOrNo == "Y");
Console.WriteLine("Thank you for registering with us");
}
void WritePrompt()
{
Console.WriteLine("Please select a course for which you want to register by typing the number inside []");
Console.WriteLine("[1]IT 145\n[2]IT 200\n[3]IT 201\n[4]IT 270\n[5]IT 315\n[6]IT 328\n[7]IT 330");
Console.Write("Enter your choice : ");
}
int ValidateChoice(int choice, int firstChoice, int secondChoice, int thirdChoice, int totalCredit)
{
if (choice < 1 || choice > 7)
return -1;
else if (choice == firstChoice && choice == secondChoice && choice == thirdChoice)
return -2;
else if (totalCredit > 9)
return -3;
return -4;
}
void WriteCurrentRegistration(int firstChoice, int secondChoice, int thirdChoice)
{
if (secondChoice == 0)
Console.WriteLine("You are currently registered for {0}", ChoiceToCourse(firstChoice));
else if (thirdChoice == 0)
Console.WriteLine("You are currently registered for {0}, {1}", ChoiceToCourse(firstChoice), ChoiceToCourse(secondChoice));
else
Console.WriteLine("You are currently registered for {0}, {1}, {2}", ChoiceToCourse(firstChoice), ChoiceToCourse(secondChoice), ChoiceToCourse(thirdChoice));
}
string ChoiceToCourse(int choice)
{
string course = "";
switch (choice)
{
case 1:
course = "IT 145";
break;
case 2:
course = "IT 200";
break;
case 3:
course = "IT 201";
break;
case 4:
course = "IT 270";
break;
case 5:
course = "IT 315";
break;
case 6:
course = "IT 328";
break;
case 7:
course = "IT 330";
break;
default:
break;
}
return course;
}
}
}
没有错误消息,没有构建错误,只是程序逻辑不起作用。
解决方案
当您成功进入 3 门课程后,totalCredit 会增加 3 次,共 3 次。给定初始值为 0,处理第 4 门课程条目时的 totalCredit 值为 9
如果要触发-3,则需要更改:
else if (totalCredit > 9)
至:
else if (totalCredit >= 9)
推荐阅读
- powershell - 使用 Powershell 调用命令的简单 SQL 插入
- android - ENOENT:没有这样的文件或目录,打开 'android/app/src/main/assets/index.android.bundle'
- python - SQL Alchemy:在同一会话中添加父项和子项时出现 DatabaseError
- spring - 新的@JoinTable 在 nativeQuery 中导致 org.hibernate.exception.SQLGrammarException,我们不知道
- android - 为多个应用程序创建深层链接
- espeak - espeak 跳过句子的第一个音素
- java - Maven 依赖问题 - 缺少工件
- r - 边际效应图与 R 中的发生率比率不对应
- c# - 将存储库注入 SiteResourceGraphType 时,“没有为 SiteResourceGraphType 类型定义无参数构造函数”消息
- javascript - 使用 while 循环生成多个按钮