将实例变量的值复制到反向数字和方法的方法。交换C#中数字的数字

时间:2015-07-26 15:06:40

标签: c#

我坚持使用我的C#程序,只是无法弄清楚如何使它工作。 首先,我应该为4digit数字创建一个实例变量,并创建getter&该实例变量的setter方法(Done with that)。

其次我应该创建4种方法:

  1. 总结数字的方法。
  2. 复制实例变量&的值的方法。扭转数字。
  3. 复制实例变量&的值的方法。首先交换&最后的数字和第4个或交换第二个&第三位数。
  4. 最后应该有一个Main方法Main方法创建一个对象,为实例变量分配一个四位数字,并测试所有方法。
    现在我已经提出了以下代码,但除了SumDigits工作正常之外,所有方法都返回0 如果有人可以帮忙解决这个问题,我将不胜感激。

        public class myClass
        {
    
        public int number=0;//instance variable
        public int r;
        public int sum = 0;
        public int rem ;
        public int reverse = 0;
        public string firstlast;
        public string secondthird;
    
        public myClass()//Constructor
        {
        }
            // set & get property
            public int MyNumber
            {
                get
                {
                    return number;
                }
                set
                {
                    number=value;
                }
            }
    
            //Setter and getter methods
        public void SetNumber(int fourNumber)
         {
            number = fourNumber;
         }
        public int GetNumber()
       {
           return number;
       }
    

    //计算并返回实例变量数字之和的方法

            public int SumDigits()
       {
    
               for (int i = 0; i < 5; i++)
               {
                       r = number % 10;
                       number = number / 10;
                       sum = sum + r;
               }
    
           return sum;
       }
    

    //复制实例变量值的方法,然后以相反的顺序返回副本的值

            public int RevNum()
        {
    
            while (number> 0)
            {
                reverse = reverse * 10 + (number - (number / 10) * 10);
                number = number / 10;
    
            }
            return reverse;
        }
    

    //复制实例变量&amp;的值的方法交换号码的第一个和最后一个数字

            public string FirstLastDigit()
           {
               firstlast = number.ToString();
                while (firstlast.Length > 1)
                {
                   {
                       char[] digits = firstlast.ToCharArray();
                       char firstDigit = digits[0];
                       digits[0] = digits[digits.Length - 1];
                       digits[digits.Length - 1] = firstDigit;
                       Console.WriteLine(new string(digits));
                   }
               }
               return firstlast;
           }
    

    //复制实例变量&amp;的值的方法交换数字的第二位和第三位

            public string SecondThirdDigit()
            {
                secondthird = number.ToString();
                while (firstlast.Length > 1)
                {
                        char[] digits = secondthird.ToCharArray();
                        char firstDigit = digits[1];
                        digits[1] = digits[digits.Length - 2];
                        digits[digits.Length - 2] = firstDigit;
                        Console.WriteLine(new string(digits));
    
    
                }
                return secondthird;
            }
    

    //创建对象的主方法,为实例变量分配一个四位数字,并测试所有方法

           public static void Main(string[] args)
           {
               myClass myNum = new myClass();
    
               myNum.GetNumber();
    
               Console.WriteLine("ENTER THE NUMBER");
               myNum.number = Convert.ToInt32(Console.ReadLine());
               Console.WriteLine("\nNumber is " + myNum.number);
               Console.ReadLine();
    
    
               myNum.SumDigits();
               Console.WriteLine("\nSum is " + myNum.sum);
    
               myNum.RevNum();
               Console.WriteLine("\nThe reverse of number " + myNum.reverse);
    
               myNum.FirstLastDigit();
               Console.WriteLine("\nThe swap of first and last digit is" + myNum.firstlast);
    
               myNum.SecondThirdDigit();
               Console.WriteLine("\nExchange of Second and third digit is" + myNum.secondthird);
    
               Console.ReadLine();
           }
        }
    }
    

1 个答案:

答案 0 :(得分:2)

我快速找了你,你的代码是99%正确。那里工作很好。我只需做一些小改动就可以让一切正常。

对于SumDigits()RevNum(),您直接使用number。问题在于,当您执行number = number / 10时,您覆盖了用户输入的新号码。最终numberSum()完成后变为0 ...所以当其他3个方法执行时,他们试图对数字0进行操作。

为了解决这个问题,我在这两种方法中将number分配给临时变量。

对于SecondThirdDigit()FirstLastDigit()方法,您的公式也是正确的。但是,您已将firstlast分配给4位数字,然后在firstlast.length > 1时执行了while循环。因为长度是4并且你的循环从未改变过这个,所以这变成了一个永无止境的循环。我不确定你为什么认为你需要一个循环?

无论如何要解决这个问题,我删除了循环,现在你的代码正常工作。您还将此结果直接写入控制台,而不是将其分配给firstlastsecondthird变量,因此我也修复了这些变量。

除此之外,其他所有内容都与代码保持不变。这是适合您的更新版本,现在应该可以正常使用:

//method to calculate and return the sum of the digits of the instance variable
public int SumDigits()
{
    // Assigned number to temp variable
    int tempNumber = number;

    for (int i = 0; i < 5; i++)
    {
        r = tempNumber % 10;
        tempNumber = tempNumber / 10;
        sum = sum + r;
    }

    return sum;
}

//method that copies the value of the instance variable, and then returns the value of the copy in a reverse order
public int RevNum()
{
    // Assigned number to temp variable
    int tempNumber = number;

    while (tempNumber > 0)
    {
        reverse = reverse * 10 + (tempNumber - (tempNumber / 10) * 10);
        tempNumber = tempNumber / 10;
    }
    return reverse;
}

//method that copies the value of the instance variable & swap the first and last digit of the number
public string FirstLastDigit()
{
    firstlast = number.ToString();

    char[] digits = firstlast.ToCharArray();
    char firstDigit = digits[0];
    digits[0] = digits[digits.Length - 1];
    digits[digits.Length - 1] = firstDigit;
    // Assigned result to firstlast instead of console output
    firstlast = new string(digits);  

    return firstlast;
}

//method that copies the value of the instance variable & swaps the second and third digit of the number
public string SecondThirdDigit()
{
    secondthird = number.ToString();

    char[] digits = secondthird.ToCharArray();
    char firstDigit = digits[1];
    digits[1] = digits[digits.Length - 2];
    digits[digits.Length - 2] = firstDigit;
    // Assigned result to secondthird instead of console output
    secondthird = new string(digits);

    return secondthird;
}