編輯:現在它作業正常,對于需要代碼的每個人,這是正確的版本。
我試圖解決這個問題,我認為我的代碼 99% 是好的,但我仍然有一些錯誤,我不知道如何解決。第 20 行:Program.CheckIfSortedAscending(int[])':并非所有代碼路徑都回傳值;
在一行中給出一串數字,用空格分隔。N 個操作將字串的元素移動到第一個位置。每次移動都在輸入要移動到第一個位置的元素的索引的行上指定。字串的所有其他元素保持相同的順序。
在所有移動操作都應用于第一個位置后,將修改后的字串列印到控制臺。如果字串的元素按升序排列,則在下一行列印 True,否則列印 False。
例子:
對于輸入資料:
1 2 3 4 5 6
2
1
5
控制臺將顯示:
6 2 1 3 4 5
錯誤的
這是代碼:
使用系統;
命名空間 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)
{
var result = true;
for (int i = 0; i <= values.Length - 2; i )
{
if (values[i] > values[i 1])
{
result = false;
}
}
return result;
}
static void MoveFirst(int[] values, int index)
{
if (index == 1)
{
int aux = values[index - 1];
values[0] = values[index];
values[index] = aux;
}
else
{
int aux = values[index];
for (int i = index; i > 0; i--)
{
values[i] = values[i - 1];
}
values[0] = aux;
}
}
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');
}
}
}
uj5u.com熱心網友回復:
首先,你會得到一個編譯錯誤,因為并非所有的代碼路徑都像它所說的那樣回傳一個值。想象一下你的陣列長度為 0,程式永遠不會進入回圈。這種情況下會得到什么回報?你也應該在回圈之外回傳一些東西,但無論如何這不是你想要的。您的代碼將只檢查前兩個值,因為您已將其設定為在第一次比較后回傳一些值。你需要的是:
var result = true;
for (int i = 0; i <= values.Length-2; i )
{
if (values[i]>values[i 1])
{
result = false;
}
}
return result;
這將檢查整個陣列,因為它在檢查后回傳一個值。我也改變了回圈中的比較。想象一個有 10 個元素的陣列。當i=8時,需要比較元素9和10(values[8], values[9])。最后,這將適用于陣列有 2 個元素的邊緣情況,如果它有一個元素,它將回傳 true。
編輯:您還可以執行以下操作,效率更高:
for (int i = 0; i <= values.Length-2; i )
{
if (values[i]>values[i 1])
{
return false;
}
}
return true;
但因為我認為這是某種家庭作業,所以第一種方法可能更好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/386507.html
