在鍵盤上接收用戶輸入的15個整數數值,輸入完成後,接收用戶輸入的指令,
如果用戶輸入a(大小寫不區分)升序排列,如果輸入d(大小寫不區分)降序排列,否則提示
用戶重新輸入指令,輸出排序前與排序後的數列內容。
下面是我的代碼
namespace ConsoleApplication16
{
class Program
{
static void Main(string[] args)
{
int[] arr = new int[15];
Console.WriteLine("請輸入15個整數");
//初始化
for (int i = 0; i < 15; ++i)
{
if (!int.TryParse(Console.ReadLine(), out arr[i]))
Console.WriteLine("輸入有誤");
}
//復制原數組
int[] arr1 = (int[])arr.Clone();
//獲取指令,根據指令調用函數
Order:
Console.WriteLine("請輸入指令");
char order;
order = (char)Console.Read();
switch (order)
{
case 'a': fun1(arr);
break;
case 'A': fun1(arr);
break;
case 'd': fun2(arr);
break;
case 'D': fun2(arr);
break;
default:
Console.WriteLine("請重新輸入指令");
goto Order;
}
//打印原數組
Console.Write("原序列為:");
for (int i = 0; i < 15; ++i)
Console.Write(arr1[i] + ",");
Console.WriteLine();
//打印新數組
Console.Write("新序列為:");
for (int i = 0; i < 15; ++i)
Console.Write(arr[i] + ",");
Console.WriteLine();
}
//a或者A指令
public static void fun1(int[] arr)
{
for(int i = 0; i < 14; ++i)
for(int j = 0; j < 14 - i; ++j)
{
int temp;
if(arr[j] > arr[j+1])
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
//d或者D指令
public static void fun2(int[] arr)
{
for(int i = 0; i < 14; ++i)
for(int j = 0; j < 14 - i; ++j)
{
int temp;
if(arr[j] < arr[j+1])
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
}
下面是測試,請教指令輸入那裡為什麼自動循環3次?
因為你用的是
order = (char)Console.Read();
它每次讀取一個字符,第一次你輸入 'e'然後按下回車換行,它輸出"請重新輸入指令"後 goto上去會讀取回車字符,再goto上去讀取換行字符,都讀取結束了才會讓你繼續輸入