2015-08-21 3 views
0

привет, пожалуйста, у меня возникают проблемы с получением значений системных переменных. вот код для получения значений от пользователя;Получение значений от пользователя

public void DetailsRate() 
{ 
begin1: 
     Console.WriteLine("\n \t Rate the Acting on a scale of 0 to 5"); 
     RateActing = int.Parse(Console.ReadLine()); 
     switch (RateActing) 
     { 
      case 0: 
      case 1: 
      case 2: 
      case 3: 
      case 4: 
      case 5: 
       Console.WriteLine("\n you have rated the action of the movie {0}", RateActing); 
       break; 
      default: 
       Console.WriteLine("you have selected the wrong choice {0}", RateActing); 
       goto begin1; 
     } 

     begin2: 
     Console.WriteLine("\n \t Rate the music of the movie on a scale of 0 to 5"); 
     RateMusic = int.Parse(Console.ReadLine()); 
     switch (RateMusic) 
     { 
      case 0: 
      case 1: 
      case 2: 
      case 3: 
      case 4: 
      case 5: 
       Console.WriteLine("you have rated the music of the movie {0}", RateMusic); 
       break; 
      default: 
       Console.WriteLine("you have selected the wrong choice {0}", RateMusic); 
       goto begin2; 
     } 
} 

Я назвал занесены значения в этот кусок кода

public double getoverallRate(double rateact, double ratemus) 
    { 
     double totrate = 0; 

     rateact = RateActing * 0.25; 
     ratemus = RateMusic * 0.15; 


     totrate = (rateact + ratemus); 
     return totrate; 
    } 

и здесь является основным методом

static void Main(string[] args) 
    { 

     MovieRating MR = new MovieRating(); 
     MR.DetailsRate(); 

     MovieRating MT = new MovieRating(); 
     double totrate = MT.getoverallRate(1, 2); 
     Console.WriteLine("total rate is {0}", totrate); 

     Console.ReadKey(); 
    } 

Пожалуйста, что Im я отсутствует значение totrate просто дает мне 0. Пожалуйста, помогите мне.

+1

getoverallRate принимает два параметра, вы проходите 5. Как он даже компилируется? И в том, что знаменитое заявление «goto»: o? – Taleeb

+0

, что должно быть ошибкой, я не копировал все параметры. Его фактически 5 параметров. и я не понимаю смысла знаменитого «goto». – Jeremiah

+0

Где находится ваш 'DetailRate()'? Каково использование 'MR' и' MT' и почему бы вам просто не использовать один вместо двух? А где хранятся 'RateActing' и' RateMusic'? Являются ли они глобальными переменными? Извините, но вам, возможно, придется переписать всю вашу программу .... по пути OO. –

ответ

0

Сначала избавьтесь от утверждений goto. С быстрым взглядом вы могли бы написать это:

static void Main(string[] args) 
    { 
     double RateActing = -1; 
     double RateMusic = -1; 

     RateActing = GetMovieRating(RateActing); 

     RateMusic = GetMovieMusicRating(RateMusic); 

     double totrate = getoverallRate(RateActing, RateMusic); 

     Console.WriteLine("total rate is {0}", totrate); 

     Console.ReadKey(); 
    } 

    private static double GetMovieRating(double RateActing) 
    { 
     do 
     { 
      Console.WriteLine("\n \t Rate the Acting on a scale of 0 to 5"); 
      double.TryParse(Console.ReadLine(), out RateActing); 
     } 
     while (RateActing < 0 || RateActing > 5); 
     Console.WriteLine("\n you have rated the action of the movie {0}", RateActing); 
     return RateActing; 
    } 

    private static double GetMovieMusicRating(double RateMusic) 
    { 
     do 
     { 
      Console.WriteLine("\n \t Rate the music of the movie on a scale of 0 to 5"); 
      double.TryParse(Console.ReadLine(), out RateMusic); 
     } 
     while (RateMusic < 0 || RateMusic > 5); 
     Console.WriteLine("\n you have rated the music of the movie {0}", RateMusic); 
     return RateMusic; 
    } 

    public static double getoverallRate(double rateact, double ratemus) 
    { 
     rateact *= 0.25; 
     ratemus *= 0.15; 

     return rateact + ratemus; 
    } 
0

Здесь много проблем - почти достаточно, чтобы начать все заново!

Первый: никогда не использовать goto - есть лучшие способы для создания потока вашей программы.

Во-вторых: Ваш метод getoverallRate принимает меньше параметров (2), чем то, что вы проходите (5), поэтому это даже не нужно строить.

В-третьих: вы ссылаетесь на три дополнительные переменные в getoverallRate, которые выглядят так, как будто они должны быть локальными переменными, но они нигде не определены. Если они будут переданы, как использование подразумевает в Main.

В-четвертых: вы передаете значения в переменных rateact и ratemus, но вы сразу же их переписываете своими вычислениями.

В-пятых: для меня было бы более разумным, если бы вы передавали входные значения от пользователя к этому методу вместе с любыми другими, которые вам нужны. Вы не должны использовать глобальные переменные из пользовательского ввода в любом методе, который вычисляет значения и возвращает результат. Вы должны всегда передавать все, что необходимо для расчета.

Шестой: Какая точка объявления MR и что делает DetailsRate?

+0

«Никогда не используйте goto» - я категорически не согласен. Для 'goto' существует допустимое использование. «Попытайтесь избежать goto» более подходит – Rob

+2

Я думаю, что пятое правило неверно. Когда Integer умножается на Double, результатом является Double. Типовое литье не обязательно, попробуйте сами. –

+0

@ J.C Вы правы – Rob

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