2013-06-28 30 views
0

можно ли сравнить общее значение обеих петель?C# Как сравнить 2 результата значений цикла

class Program 
{ 
    static void Main(string[] args) 
    { 
     int Op1_days = 0, Op1_salary = 0, Op2_days = 0, Op2_salary = 1, Op1_total = 0, Op2_total = 1; 
     Console.WriteLine("Option 1"); 
     DisplayOption1(Op1_days, Op1_salary, Op1_total); 

     Console.WriteLine("\nOption 2"); 
     DisplayOption2(Op2_days, Op2_salary, Op2_total); 
     { 
      Console.Write(Enter the option 1 total salary 
    } 
    static void DisplayOption1(int Op1_days, int Op1_salary, int Op1_total) 
    { 
     Console.WriteLine("Days Salary"); 
     for (Op1_days = 1; Op1_days < 11; Op1_days++) 
     { 
      Op1_salary = Op1_salary + 100; 
      Console.WriteLine("{0}  {1}", Op1_days, Op1_salary); 
      Op1_total = (Op1_total + Op1_salary); 
     } 
     Console.WriteLine("Total of option 1 salary is = {0} ", Op1_total); 
    } 
    static void DisplayOption2(int Op2_days, int Op2_salary, int Op2_total) 
    { 
     Console.WriteLine("Days Salary"); 
     Console.WriteLine("1  1"); 
     for (Op2_days = 2; Op2_days < 11; Op2_days++) 
     { 
      Op2_salary = Op2_salary * 2; 
      Console.WriteLine("{0}  {1}", Op2_days, Op2_salary); 
      Op2_total = (Op2_total + Op2_salary); 
     } 
     Console.WriteLine("Total of option 2 salary is = {0} ", Op2_total); 
    } 
} 

я могу получить итоги, но я просто не могу сравнить их обоих, она будет просто сравнить первое значение цикла

+0

Я думаю, что вы нужно немного уточнить этот вопрос. Я не совсем понимаю, о чем вы спрашиваете. –

+0

Да, вы хотите сравнить Op1_total и Op2_total? Если это так, просто измените подписи DisplayOption1 и DisplayOption2, чтобы вернуть эти значения, тогда вы можете легко сравнить их в своем main(). –

ответ

0

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

static void Main(string[] args) 
{ 
    int Op1_days = 0, Op1_salary = 0, Op2_days = 0, Op2_salary = 1; 
    Console.WriteLine("Option 1"); 
    int Op1_total = DisplayOption1(Op1_days, Op1_salary, Op1_total); 

    Console.WriteLine("\nOption 2"); 
    int Op2_total = DisplayOption2(Op2_days, Op2_salary, Op2_total); 

    if (Op1_total == Op2_total) 
    { 
     Console.Write("The two salaries are equal"); 
    } 
} 

static int DisplayOption1(int Op1_days, int Op1_salary) 
{ 
    int Op1_total = 0; 
    Console.WriteLine("Days Salary"); 
    for (Op1_days = 1; Op1_days < 11; Op1_days++) 
    { 
     Op1_salary = Op1_salary + 100; 
     Console.WriteLine("{0}  {1}", Op1_days, Op1_salary); 
     Op1_total = (Op1_total + Op1_salary); 
    } 
    Console.WriteLine("Total of option 1 salary is = {0} ", Op1_total); 
    return Op1_total; 
} 
static void DisplayOption2(int Op2_days, int Op2_salary) 
{ 
    int Op2_total = 0; 
    Console.WriteLine("Days Salary"); 
    Console.WriteLine("1  1"); 
    for (Op2_days = 2; Op2_days < 11; Op2_days++) 
    { 
     Op2_salary = Op2_salary * 2; 
     Console.WriteLine("{0}  {1}", Op2_days, Op2_salary); 
     Op2_total = (Op2_total + Op2_salary); 
    } 
    Console.WriteLine("Total of option 2 salary is = {0} ", Op2_total); 
    return Op2_total; 
} 
+0

Вы забыли изменить аргументы функции, чтобы не включать общее число. –

+0

спасибо вам большое =) – user2532651

0

Эта проблема заключается в том, что вы передаете значения для общего значения «по значению». Это означает, что начальное значение int передается в функцию, но любые изменения не применяются к исходному int (поэтому, когда вы делаете сравнение, вы получаете начальное значение.) Вы можете исправить это двумя способами , Вы можете сделать то, что сделал p.s.w.g, и вернуть значения, или вы можете передать свои параметры «по ссылке». В этом случае значения привязаны к начальным переменным, переданным таким образом, что изменения можно увидеть вне вызова функции. Для того, чтобы сделать это в C# вы просто добавить «реф» ключевое слово перед параметром в сигнатуре метода (где она определена) и вызов метода (где вы его называете) следующим образом:

static void Main(string[] args) 
    { 
     int Op1_days = 0, Op1_salary = 0, Op2_days = 0, Op2_salary = 1, Op1_total = 0, Op2_total = 1; 
     Console.WriteLine("Option 1"); 
     DisplayOption1(Op1_days, Op1_salary, ref Op1_total); 

     Console.WriteLine("\nOption 2"); 
     DisplayOption2(Op2_days, Op2_salary, ref Op2_total); 

     Console.WriteLine("{0} Compared to {1}",Op1_total,Op2_total); 
     Console.ReadLine(); 
    } 
    static void DisplayOption1(int Op1_days, int Op1_salary, ref int Op1_total) 
    { 
     Console.WriteLine("Days Salary"); 
     for (Op1_days = 1; Op1_days < 11; Op1_days++) 
     { 
      Op1_salary = Op1_salary + 100; 
      Console.WriteLine("{0}  {1}", Op1_days, Op1_salary); 
      Op1_total = (Op1_total + Op1_salary); 
     } 
     Console.WriteLine("Total of option 1 salary is = {0} ", Op1_total); 
    } 
    static void DisplayOption2(int Op2_days, int Op2_salary, ref int Op2_total) 
    { 
     Console.WriteLine("Days Salary"); 
     Console.WriteLine("1  1"); 
     for (Op2_days = 2; Op2_days < 11; Op2_days++) 
     { 
      Op2_salary = Op2_salary * 2; 
      Console.WriteLine("{0}  {1}", Op2_days, Op2_salary); 
      Op2_total = (Op2_total + Op2_salary); 
     } 
     Console.WriteLine("Total of option 2 salary is = {0} ", Op2_total); 
    } 
+0

большое спасибо =) – user2532651