2013-11-10 67 views
-3

所以,我对整个C#语言有些新鲜,有人要求我们将其简单的if else转换为开关。这就是我所知道的。这是对的吗?如果不是,你能告诉我问题在哪里吗?还是有什么缺失?这里唯一的问题是开关盒的输出没有出现。C#开关盒不出现

static void Main(string[] args) 
    { 

     Console.Write("Enter Name: "); 
     string studname = Console.ReadLine(); 
     Console.Write("Enter Age: "); 
     string age = Console.ReadLine(); 
     Console.Write("Enter Year Level: "); 
     int level = int.Parse(Console.ReadLine()); 
     Console.Write("Enter Course: "); 
     string course = Console.ReadLine(); 
     Console.Write("Enter Score 1: "); 
     int num1 = int.Parse(Console.ReadLine()); 
     Console.Write("Enter Score 2: "); 
     int num2 = int.Parse(Console.ReadLine()); 
     Console.Write("Enter Score 3: "); 
     int num3 = int.Parse(Console.ReadLine()); 
     int total = num1 + num2 + num3; 
     int ave = (num1 + num2 + num3)/3; 
     int rate = ave; 




     Console.WriteLine(""); 
     Console.WriteLine(""); 
     Console.WriteLine(""); 
     Console.Write("Student Name: " + studname); 
     Console.WriteLine(""); 
     Console.Write("Student Age: " + age); 
     Console.WriteLine(""); 
     Console.Write("Student Year Level: " + level); 
     Console.WriteLine(""); 
     Console.Write("Student Course: " + course); 
     Console.WriteLine(""); 
     Console.Write("Score 1: " + num1); 
     Console.WriteLine(""); 
     Console.Write("Score 2: " + num2); 
     Console.WriteLine(""); 
     Console.Write("Score 3: " + num3); 
     Console.WriteLine(""); 
     Console.Write("Total_Score= " + total); 
     Console.WriteLine(""); 
     Console.Write("Total_Average= " + ave); 


     switch (rate) 
     { 
      case 1: 
       if (rate < 100 && rate > 90) 

       Console.Write("Rate = 1.00"); 
       Console.WriteLine(""); 
       Console.Write("Hi! " + studname + "you Passed"); 
       Console.WriteLine(""); 
       break; 


      case 2: 
       if (rate < 89 && rate > 85) 

        Console.Write("Rate = 1.00"); 
       Console.WriteLine(""); 
       Console.Write("Hi! " + studname + "you Passed"); 
       Console.WriteLine(""); 
       break; 

      case 3: 
       if (rate < 84 && rate > 80) 

        Console.Write("Rate = 1.00"); 
       Console.WriteLine(""); 
       Console.Write("Hi! " + studname + "you Passed"); 
       Console.WriteLine(""); 
       break; 

      case 4: 
       if (rate < 79 && rate > 75) 

        Console.Write("Rate = 1.00"); 
       Console.WriteLine(""); 
       Console.Write("Hi! " + studname + "you Passed"); 
       Console.WriteLine(""); 
       break; 

      case 5: 
       if (rate < 75) 

        Console.Write("Rate = 5.00"); 
       Console.WriteLine(""); 
       Console.Write("Hi! " + studname + "you Failed"); 
       Console.WriteLine(""); 
       break; 


     } 





     Console.ReadLine(); 
    } 
+0

单词'重构'和DRY春天想起来...... –

回答

1

您误解了switch -block的作用。如果您正在测试的值仅使用几个设置值中的一个,则会使用它。

试着摆脱整个switch版块,然后重新编写此代码块,以便使用一系列if/else代替。另请注意,您需要处理边缘案例,如rate = 90;您需要检查rate >= 90捕捉这种情况下:

if (rate < 100 && rate >= 90) 
{ 
    Console.Write("Rate = 1.00"); 
    Console.WriteLine(""); 
    Console.Write("Hi! " + studname + "you Passed"); 
    Console.WriteLine(""); 
} 
else if (rate < 89 && rate >= 85) 
{ 
    Console.Write("Rate = 1.00"); 
    Console.WriteLine(""); 
    Console.Write("Hi! " + studname + "you Passed"); 
    Console.WriteLine(""); 
} 
else ... 

或者,如果你真的想这样做同样的事情在每一种情况下,除非rate < 75,你可以简化这个到:

if (rate >= 75) 
{ 
    Console.Write("Rate = 1.00"); 
    Console.WriteLine(""); 
    Console.Write("Hi! " + studname + "you Passed"); 
    Console.WriteLine(""); 
} 
else 
{ 
    Console.Write("Rate = 5.00"); 
    Console.WriteLine(""); 
    Console.Write("Hi! " + studname + "you Failed"); 
    Console.WriteLine(""); 
} 

甚至仅仅是这样的:

Console.Write("Rate = {0}", (rate >= 75) ? "1.00" : "5.00"); 
Console.WriteLine(""); 
Console.Write("Hi! {0} you {1}", studname, (rate >= 75) ? "Passed" : "Failed"); 
Console.WriteLine(""); 
+0

它听起来像OP开始与if语句,并希望把它写成一个开关的情况下......这不是在这种情况下是有道理的。 – Harrison

0

你的情况下,值不正确,switch语句在这种情况下接通的情况下的值,所以,案例1只会在速率= 1时被调用,等等,所以你需要修改这些值才能输出。