我正在处理来自CodeChef的this问题,我在使用用户输入的大小进行初始化的数组有一个小问题,但我收到一个似乎有的数组初始化自己,我不知道为什么。我知道我可以查看其他人提交的内容并“复制并粘贴”,但我想知道我做错了什么以及如何修复它以便我可以实现自己的代码而不是别人。
这是理论的样子:
string _input1 = Console.ReadLine().Replace(" ", "");// Get number of items
int[] _weightsArray = new int[_input1[0]];// Set size to number of items
一旦用户输入一个数字表示数字5和3,该数组应该得到索引为0的数字(这是5并将数组设置为该索引),然后用户输入5个随机数字,由空格然后将这些数字填充到数组中。
但是在此示例中,数组未设置为索引大小为5,它的大小设置为53,并且当每个索引处的数组都填充49时。
以下是完整代码:
Int16 _testCases = Convert.ToInt16(Console.ReadLine());// Get test cases
for (int i = 0; i < _testCases; i++) {
string _input1 = Console.ReadLine().Replace(" ", "");// Get number of items
string _weights = Console.ReadLine().Replace(" ", "");
int[] _weightsArray = new int[_input1[0]];// Set size to number of items
for (int j = 0; j < _weights.Length; j++) {
_weightsArray[j] = Convert.ToInt32(_weights[j]);// Add weights to array
}
for (int k = 0; k < _weightsArray.Length; k++) {
Console.WriteLine(_weightsArray[k]);
}
}
Console.ReadLine();
}
正如你所看到_weightsArray应该被设置为_input1 [0]并且通过调试我可以确认_index1 [0]实际上是用户输入的int,但由于某种原因,编译器完全忽略了这一点。
这是实际输出,数组大小超过5且不包含任何给定数字(2,2,2,2)
为什么它为每个索引提供随机索引大小和50?
三江源
答案 0 :(得分:1)
您的变量_input1
是一个字符串,因此当您使用
int[] _weightsArray = new int[_input1[0]];
你正在创建一个数组,其大小是第一个char的值(50是你的字符串以2开头)。
您实际想要做的是将字符串转换为整数:
int _weightsArraySize = Convert.ToInt32(_input1);
int[] _weightsArray = new int[_weightsArraySize];
具有权重的字符串要解析起来有点复杂。首先,我们想在空格上分隔它以获得带有输入的字符串数组:
string[] _stringWeightsArray = _weights.Split(' ', StringSplitOptions.RemoveEmptyEntries);
然后,我们要将每个字符串转换为相应的整数:
for (int k = 0; k < _weightsArraySize; k++) {
_weightsArray[k] = Convert.ToInt32(_stringWeightsArray[k]);
}
此时,您至少应该正确解析了问题的输入。
但是,请注意,此代码非常基本,如果您的输入不是预期的格式(例如,如果您在权重中键入字母,或类似的东西),一切都会爆炸。