这是我正在做的练习:
编写一个程序,将abcd格式的四位数作为输入(例如2011)并执行以下操作:
•计算数字的总和(在我们的示例中为2 + 0 + 1 + 1 = 4)。
•在控制台上以相反顺序打印数字:dcba(在我们的示例中为1102)。
•将最后一位数字放在第一个位置:dabc(在我们的例子中为1201)。
•交换第二个和第三个数字:acbd(在我们的示例中为2101)。
这是我的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
string FourDigitNum = Console.ReadLine();
string[] digits = FourDigitNum.Split();
int firstDigit = int.Parse(digits[0]);
int secondDigit = int.Parse(digits[1]);
int thirdDigit = int.Parse(digits[2]);
int fourthDigit = int.Parse(digits[3]);
int sum = firstDigit + secondDigit + thirdDigit + fourthDigit;
string reversed = digits[3] + digits[2] + digits[1] + digits[0];
string lastCharFirst = digits[3] + digits[0] + digits[1] + digits[0];
string exchanged = digits[0] + digits[2] + digits[1] + digits[3];
Console.WriteLine("The Sum is: {0}", sum);
Console.WriteLine("The Reversed number is: {0}", reversed);
Console.WriteLine("The Last Digit is First: {0}", lastCharFirst);
Console.WriteLine("The Second and Third Digit Exchanged: {0}", exchanged);
}
}
}
我使用1100作为输入时得到的错误是:
未处理的异常:System.IndexOutOfRangeException:索引是 在阵列的boun ds之外。在 ConsoleApplication6.Program.Main(String [] args)in c:\ Users \ User1 \ Document s \ Visual Studio 2013 \ Projects \ ConsoleApplication6 \ Program.cs:第16行
编辑:非常感谢,我误解了Split();工作。这是我最后的工作代码:
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
string digits = Console.ReadLine();
int firstDigit = (int)Char.GetNumericValue(digits[0]);
int secondDigit = (int)Char.GetNumericValue(digits[1]);
int thirdDigit = (int)Char.GetNumericValue(digits[2]);
int fourthDigit = (int)Char.GetNumericValue(digits[3]);
int sum = firstDigit + secondDigit + thirdDigit + fourthDigit;
Console.WriteLine("The Sum is: {0}", sum);
Console.WriteLine("The Reversed number is: {3}{2}{1}{0}", firstDigit, secondDigit, thirdDigit, fourthDigit);
Console.WriteLine("The Last Digit is First: {3}{0}{1}{2}", firstDigit, secondDigit, thirdDigit, fourthDigit);
Console.WriteLine("The Second and Third Digit Exchanged: {0}{2}{1}{3}", firstDigit, secondDigit, thirdDigit, fourthDigit);
}
}
}
答案 0 :(得分:5)
不需要Split
,您假设通过执行Split()
它会将每个字符拆分为字符串数组的元素。不是,Split()
没有任何参数会在空白字符上拆分,因为在你的字符串1102
中你没有任何空格字符,你将得到一个单元素数组。因此例外。
使用字符串作为字符数组,您可以访问每个索引并通过连接字符创建反向字符串。还要学习调试和单步执行代码,这将有助于您排除代码故障。
作为提示使用:
int firstDigit = (int) Char.GetNumericValue(FourDigitNum[0]);
答案 1 :(得分:3)
" IndexOutOfRangeException"表示您尝试访问超出范围的集合元素。在这种情况下,索引1
超出了数组digits
的范围。
您可以使用调试器检查数组中的内容。方便的是,当你在visual studio中遇到未捕获的异常时,它通常会为你创建一个断点。
*"当地人"选项卡当前已被选中,但您可以选择" Watch"如果您想编写自己的表达式,请参阅Visual Studio Debugging Tutorial
如您所见,digits
数组只包含1个元素digits[0]
,其中包含您的整个输入。
至于如何实际获取字符串数字列表,有很多方法可以做到,这里有一个简单的方法。
string[] digits = FourDigitNum.ToCharArray().Select(c => c.ToString()).ToArray();
现在如果你在学校这样做,你的老师可能会对你使用Select
声明产生怀疑,但是我会把另一种方法作为练习给你。
答案 2 :(得分:2)
问题在于
string[] digits = FourDigitNum.Split();
假设您有1100作为输入。你认为这会给[1,1,0,0],但它会给你[1100]
你应该把它改成
string digits = Console.ReadLine();
string.Split()将分隔字符串,假设空格为分隔符。
答案 3 :(得分:0)
当你这样做时
string[] digits = FourDigitNum.Split();
它只返回一个只包含一个项目的数组。拆分不会按照您的意图发生,这就是为什么当您尝试
时出现Index was outside the bounds of the array
错误的原因
int secondDigit = int.Parse(digits[1]);
答案 4 :(得分:0)
你在这里误解了字符串用法。 String的核心也是一组字符。您可以通过索引直接访问这些字符。
您的代码应如下所示:
static void Main(string[] args)
{
string digits = Console.ReadLine();
int firstDigit = Convert.ToInt32(digits[0]);
int secondDigit = Convert.ToInt32(digits[1]);
int thirdDigit = Convert.ToInt32(digits[2]);
int fourthDigit = Convert.ToInt32(digits[3]);
int sum = firstDigit + secondDigit + thirdDigit + fourthDigit;
string reversed = digits[3] + digits[2] + digits[1] + digits[0];
string lastCharFirst = digits[3] + digits[0] + digits[1] + digits[0];
string exchanged = digits[0] + digits[2] + digits[1] + digits[3];
Console.WriteLine("The Sum is: {0}", sum);
Console.WriteLine("The Reversed number is: {0}", reversed);
Console.WriteLine("The Last Digit is First: {0}", lastCharFirst);
Console.WriteLine("The Second and Third Digit Exchanged: {0}", exchanged);
}
答案 5 :(得分:0)
你的FourDigitNum.Split()没有做你想要的。不是将每个数字拆分成数组,而是最终得到一个包含1个元素的数组,即4位数。
更改
string[] digits = FourDigitNum.Select(digit => digit.ToString()).ToArray();
要
using System.Linq;
确保你有
using
使用您的其他2011
The Sum is: 4
The Reversed number is: 1102
The Last Digit is First: 1202
The Second and Third Digit Exchanged: 2101
声明,其余代码可以保持不变。
结果:
IAppBuilder
答案 6 :(得分:0)
没有要分割的已定义字符。你可以通过下面的字符串中的每个字符:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
string FourDigitNum = Console.ReadLine();
List<string> digitsList = new List<string>();
foreach (char c in FourDigitNum)
{
digitsList.Add(c.ToString());
}
string[] digits = digitsList.ToArray();
int firstDigit = int.Parse(digits[0]);
int secondDigit = int.Parse(digits[1]);
int thirdDigit = int.Parse(digits[2]);
int fourthDigit = int.Parse(digits[3]);
int sum = firstDigit + secondDigit + thirdDigit + fourthDigit;
string reversed = digits[3] + digits[2] + digits[1] + digits[0];
string lastCharFirst = digits[3] + digits[0] + digits[1] + digits[0];
string exchanged = digits[0] + digits[2] + digits[1] + digits[3];
Console.WriteLine("The Sum is: {0}", sum);
Console.WriteLine("The Reversed number is: {0}", reversed);
Console.WriteLine("The Last Digit is First: {0}", lastCharFirst);
Console.WriteLine("The Second and Third Digit Exchanged: {0}", exchanged);
}
}
}
答案 7 :(得分:0)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
string FourDigitNum = Console.ReadLine();
int firstDigit = int.Parse(FourDigitNum.SubString(0,1));
int secondDigit = int.Parse(FourDigitNum.SubString(1,1));
int thirdDigit = int.Parse(FourDigitNum.SubString(2,1));
int fourthDigit = int.Parse(FourDigitNum.SubString(3,1));
int sum = firstDigit + secondDigit + thirdDigit + fourthDigit;
string reversed = fourthDigit.ToString() + thirdDigit.ToString() + secondDigit.ToString() + firstDigit.ToString();
string lastCharFirst = fourthDigit.ToString() + firstDigit.ToString() + secondDigit.ToString() + firstDigit.ToString();
string exchanged = firstDigit.ToString() + thirdDigit.ToString() + secondDigit.ToString() + fourthDigit.ToString();
Console.WriteLine("The Sum is: {0}", sum);
Console.WriteLine("The Reversed number is: {0}", reversed);
Console.WriteLine("The Last Digit is First: {0}", lastCharFirst);
Console.WriteLine("The Second and Third Digit Exchanged: {0}", exchanged);
}
}
}
我没有在机器上检查过,但我认为它应该可行。尝试执行一次。
答案 8 :(得分:-1)
你正在硬编码输入字符串的长度,但是.Split()只在数组中创建一个项目,而不是四个。
您可以将字符串拆分为char数组.ToCharArray()以创建一个数组,其中每个数字都作为数组中的项目。