2014-02-07 5 views
-2

Я новичок в мире C#. я работал над Программой, чтобы определить классы студентов из ввода баллов, который представляет собой диапазон 1 и 100. Но он продолжает цикл от начала до конца почти бесконечно. вот программа PLS, что я могу сделать ....?Как избавиться от бесконечного цикла?

namespace ExamScore 
{ 
    class YourExamScore 
    { 
     public string ExamScore(int[] value, int startindex, int endindex) 
     { 
      bool YourExamScore; 
      var terminate = -1; 


      for (var index = 0; index <= 100; index++) 
      { 

       if (YourExamScore = (value[90] <= value[99])) 
       { 
        Console.WriteLine("You Have An Excellent Score"); 
       } 
       else if (YourExamScore = (value[70] <= value[89])) 
       { 
        Console.WriteLine("You Have a Good Score"); 
       } 
       else if (YourExamScore = (value[50] <= value[69])) 
       { 
        Console.WriteLine("You Have a Satisfactory Score"); 
       } 
       else if (YourExamScore = (value[0] <= value[49])) 
       { 
        Console.WriteLine("You Have a Satisfactory Score"); 
       } 
       else 
       { 
        return terminate.ToString(); 
       } 
      } 

      return ""; 

     } 


     static void Main(string[] args) 
     { 
      int YourExamScore; 
      { 
       Console.WriteLine("Input Your Exam Score"); 
       YourExamScore = Convert.ToInt32(Console.ReadLine()); 
      } 
      { 
      var e = new YourExamScore(); 
      var value = new int[100] {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30, 
      31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63, 
      64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100}; 

        Console.WriteLine(e.ExamScore(value, 90, 100)); 
        Console.ReadKey(); 
        Console.WriteLine(e.ExamScore(value, 70, 89)); 
        Console.ReadKey(); 
        Console.WriteLine(e.ExamScore(value, 50, 69)); 
        Console.ReadKey(); 
        Console.WriteLine(e.ExamScore(value, 0, 49)); 
        Console.ReadKey(); 
      } 

     } 
    } 
} 

и выход этого

У вас есть отличная оценка
У вас есть отличная оценка
У вас есть отличная оценка
У вас есть отличная оценка
у вас есть отличный результат
У вас отличная оценка
У вас отличная оценка
У вас есть отличная оценка
У вас есть отличная оценка
У вас есть отличная оценка
У вас есть отличная оценка
У вас есть отличная оценка
У вас есть отличная оценка
У вас есть отличная оценка
У вас есть отличная оценка
У вас есть отличная оценка
У вас есть отличная оценка
У вас есть отличная оценка

+1

Я ничего не вижу в этом коде, который бы делал это * loop бесконечным *? – Liam

+0

У вас есть логическая проблема при проверке условий для принятия решения. –

+8

* «продолжает цикл от начала до конца ** почти бесконечно **» *. Нет, он запускает цикл 101 раз, как указано в 'for' (' index <= 100'). Сначала определите, что имеет параметр 'value'. «Значение» - это плохой выбор именования параметра. – Groo

ответ

2

Вам не нужна петля, или массив на все:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine("Input Your Exam Score"); 
     var examScore = Convert.ToInt32(Console.ReadLine()); 

     var grade = GetGrade(examScore); 
     Console.WriteLine(grade); 
    } 

    private static string GetGrade(int examScore) 
    { 
     if (examScore >= 90) 
      return "Excellent"; 

     if (examScore >= 70) 
      return "Good"; 

     return "Satisfactory"; 
    } 
} 
+0

+1 Это единственный ответ (во время публикации), который на самом деле делает то, что ОП пытается достичь. Единственная проблема, с которой я сталкиваюсь, заключается в том, что вы не включили условия для оценок ниже 0 и выше 100, что, похоже, пытается сделать OP с его переменной 'terminate'. –

+0

@JW: Я на самом деле сначала подумал о добавлении проверки диапазона в начале метода и бросил «ArgumentOutOfRangeException», но затем я удалил его, потому что казалось, что он излишне путает OP. Да, возврат строки '' -1 "' будет (я думаю) ближе к намерениям OP (но я сомневаюсь, что это фактическое требование этой домашней работы или что-то еще). Вы также можете заметить, что я не возвращал точные фразы как OP, чтобы сохранить код короче. Возможно, была и какая-то лень. :) – Groo

+0

Спасибо большое. Это сработало – user3282967

0

Ваши если заявления не сравниваете == они назначая =, который всегда будет верно и для первого, если оценивали

+4

Нет, они присваивают логическое значение для сравнения ... это странно, но верно. – Jcl

+0

Ohh Это запутанно, потому что YourScore в Main определяется как int, я не видел, что ther был bool Yourscore в контексте ExamScore – CodeHacker

0

Для условий вы должны написать:

int score = value[index]; 
if (90 <= score && score <= 99)) 
{ 
    Console.WriteLine("You Have An Excellent Score"); 
} 
// ... etc. 

Надежда это то, что вы имели в виду бесконечным циклом.

0

Вы можете переписать программу в более эффективном пути:

public class ScoreRange { 
    public int Min { get; set; } 
    public int Max { get; set; } 
    public string Message { get; set; } 
} 

И ваш главный:

int YourExamScore; 
Console.WriteLine("Input Your Exam Score"); 
YourExamScore = Convert.ToInt32(Console.ReadLine()); 

     List<ScoreRange> ranges = new List<ScoreRange>(); 
     ranges.Add(new ScoreRange() { 
      Min = 0, 
      Max = 49, 
      Message = "You Have a Satisfactory Score" 
     }); 
     ranges.Add(new ScoreRange() { 
      Min = 50, 
      Max = 69, 
      Message = "You Have a Satisfactory Score" 
     }); 
     ranges.Add(new ScoreRange() { 
      Min = 70, 
      Max = 89, 
      Message = "You Have a Good Score" 
     }); 
     ranges.Add(new ScoreRange() { 
      Min = 90, 
      Max = 100, 
      Message = "You Have An Excellent Score" 
     }); 



     string message = ranges.First(x => x.Min <= YourExamScore && YourExamScore <= x.Max).Message; 
     Console.WriteLine(message); 

Знайте, что вам необходимо проверить диапазон использования ExExamScore от 0 до 100

Смежные вопросы