我坚持使用我的C#程序,只是无法弄清楚如何使它工作。 首先,我应该为4digit数字创建一个实例变量,并创建getter&该实例变量的setter方法(Done with that)。
其次我应该创建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();
}
}
}
答案 0 :(得分:2)
我快速找了你,你的代码是99%正确。那里工作很好。我只需做一些小改动就可以让一切正常。
对于SumDigits()
和RevNum()
,您直接使用number
。问题在于,当您执行number = number / 10
时,您覆盖了用户输入的新号码。最终number
在Sum()
完成后变为0 ...所以当其他3个方法执行时,他们试图对数字0进行操作。
为了解决这个问题,我在这两种方法中将number
分配给临时变量。
对于SecondThirdDigit()
和FirstLastDigit()
方法,您的公式也是正确的。但是,您已将firstlast
分配给4位数字,然后在firstlast.length > 1
时执行了while循环。因为长度是4并且你的循环从未改变过这个,所以这变成了一个永无止境的循环。我不确定你为什么认为你需要一个循环?
无论如何要解决这个问题,我删除了循环,现在你的代码正常工作。您还将此结果直接写入控制台,而不是将其分配给firstlast
和secondthird
变量,因此我也修复了这些变量。
除此之外,其他所有内容都与代码保持不变。这是适合您的更新版本,现在应该可以正常使用:
//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;
}