【发布时间】:2021-05-05 12:50:28
【问题描述】:
using System;
namespace MoveFirst
{
class Program
{
static void Main(string[] args)
{
int[] values = ReadValuesList();
int[] positionsToMove = ReadPositions();
for (int i = 0; i < positionsToMove.Length; i++)
MoveFirst(values, positionsToMove[i]);
PrintValuesList(values);
Console.WriteLine(CheckIfSortedAscending(values));
Console.Read();
}
static bool CheckIfSortedAscending(int[] values)
{
for (int i = 1; i < values.Length; i++)
if (values[i - 1] > values[i])
return false;
return true;
}
public static void MoveFirst(int[] values, int index)
{
var temp = values[0];
values[0] = values[index];
values[index] = temp;
}
static int[] ReadPositions()
{
int positionsNumber = Convert.ToInt32(Console.ReadLine());
int[] positions = new int[positionsNumber];
for (int i = 0; i < positionsNumber; i++)
positions[i] = Convert.ToInt32(Console.ReadLine());
return positions;
}
static int[] ReadValuesList()
{
string[] inputValues = Console.ReadLine().Split(' ');
int[] values = new int[inputValues.Length];
for (int i = 0; i < values.Length; i++)
values[i] = Convert.ToInt32(inputValues[i]);
return values;
}
static void PrintValuesList(int[] valuesList)
{
for (int i = 0; i < valuesList.Length; i++)
Console.Write(valuesList[i] + " ");
Console.Write('\n');
}
}
}
这是我的全部代码,但我的结果有问题..我可以就如何在 MoveFirst 方法中更正代码获得一些建议吗?
在一行中给出了一系列数字,以空格分隔。将字符串元素移动到第一个位置有 N 次操作。每次移动都在一行上指定(必须移动到第一个位置的元素的索引),但字符串的所有其他元素保持不变顺序。
例如,如果用户输入:1 2 3 4 5 6
1
5
结果应该是:6 2 1 3 4 5
我的结果是:6 1 3 4 5 2
【问题讨论】:
-
为什么不使用
List<int>而不是数组?还是在您的作业中使用数组? -
这就是我的练习方式..不幸的是,它必须是一个数组..
-
移动第一个是不够的,你必须移动所有项目。从最后一个索引开始,将每个元素再推一个位置,直到到达插入项的索引。
-
使用这样的代码,设置单元测试可能很有用。 IE。创建一个小数组,用一些不同的数据调用各个小函数并检查结果。它符合您的期望吗?你能阅读并理解为什么测试的代码没有按预期工作吗?如果没有,你能测试一个更小的部分吗?如果一切都失败了,请学习如何使用调试器并逐步执行代码,这样您就可以在每个单独的语句之后检查程序状态。
标签: c# arrays methods numbers move