1.方法的调用几种情况
1).基本的使用
using System;
namespace first_space
{
class CommonClass
{
public static void Main()
{
int n1 = 10;
int n2 = 20;
int max = GetMax(n1, n2);
Console.WriteLine("最大值为:{0}", max);
Console.ReadKey();
}
public static int GetMax(int n1, int n2)
{
return n1 > n2 ? n1 : n2;
}
}
}
// 20
2).被调用处获取调用处的变量:通过参数传递
namespace first_space
{
class CommonClass
{
public static void Main()
{
int n1 = 10;
Addnum(n1);
Console.WriteLine("n的值为:{0}", n1);
Console.ReadKey();
}
// 设置静态方法,此处没有任何返回值
public static void Addnum(int n1)
{
n1 += 10;
}
}
}
//内部方法:20
//n的值为:10
如果调用的方法里面,没有返回值去接收修改的变量。即使传递一个变量给方法,最终这个变也仅仅是在方法里面变动了,在全局中这边变量其实没有变动。
3).被调用处获取调用处的变量:静态/全局变量
namespace first_space
{
class CommonClass
{
public static int n = 10; // 静态变量、也是一个全局变量
public static void Main()
{
Addnum();
Console.WriteLine("n的值为:{0}", n);
Console.ReadKey();
}
public static void Addnum()
{
n += 10; // 因n是全局变量,所以不用通过函数的参数,也能获取到这个变量的值
Console.WriteLine("内部方法:{0}", n);
}
}
}
// 内部方法:20
// n的值为:20
因设置了全局变量n,在调用方法Addnum()的时候,没有传递参数,因这个方法本身就能获取到全局变量本身,故对这个全局变量本身做了修改!
4).函数传递的是变量的值,不是变量本身
namespace first_space
{
class CommonClass
{
public static int n = 10;
public static void Main()
{
Addnum(n); // 此处传递了n,相当于是把n的值传递过去,并不是n元素本身
Console.WriteLine("n的值为:{0}", n);
Console.ReadKey();
}
public static void Addnum(int n) //此处传递了全局变量n,代表n的值,不是n本身
{
n += 10;
Console.WriteLine("内部方法:{0}", n);
}
}
}
//内部方法:20
//n的值为:10
Addnum(n),虽然代表获取到了全局变量的n,但传递给函数的时候,只是传递n的值,相当于n的一个副本。不能对n本身做修改。这个函数内部读取的也是这个副本,不是n本身。故最终在Main方法中的n还是原来的值
5).将数组传递到方法中
namespace first_space
{
class CommonClass
{
public static int[] nums = { 1, 3, 5, 7, 9 };
public static int sum = 0;
static void Main() // Main函数此处没填写任何参数也可以
{
GetSum(nums); // 传递数组到方法中,直接写数组名即可
}
public static void GetSum(int[] array) // 因形参是int类型的数组,需要写成int[] array
{
for (int i = 0; i < array.Length; i++)
{
sum += array[i];
}
Console.WriteLine("sum的值为:{0}", sum);
Console.ReadKey();
}
}
}
1. Main函数中,string[] args 是用来处理命令行参数的。命令行参数,就是你运行这个程序的时候给它传的参数。它是可选项,不是必须的.
2. 数组作为形参的时候,需要定义类型,例如int[] array这种形式。如果作为实参,直接写数组名即可。
2.特殊方法:递归方法
int index = 0;
Digui(index);
static void Digui(int i)
{
if (i >= 5) // 递归需要明确停止的条件
{
return; // return 后面可以为空,代表停止但没返回任何内容
}
else
{
Console.WriteLine("HelloWorld!!!");
i += 1;
Digui(i);
}
}
Console.ReadKey(true);
// 结果:
HelloWorld!!!
HelloWorld!!!
HelloWorld!!!
HelloWorld!!!
HelloWorld!!!
3.数组中求最大值—假设法
int[] array = { 3, 1, 5, 2, 16, 10 };
int max = array[0]; // 假设数组中第一个元素是最大值
for (int i = 0; i < array.Length; i++)
{
if (array[i] > max) // 遍历的时候,只要有一个元素比假设的值大,都将更大的值赋值给这个max
{
max = array[i];
}
}
Console.WriteLine(max);
Console.ReadKey();
// 16
假设法,只适合找到一个值,最大值或最小值。如果想排序或想找第二大的值,则不适用了。
4.数组的排序—冒泡排序
int[] array = { 3, 1, 5, 2, 16, 10 };
for (int i = 0; i < array.Length-1; i++) // 外面循环控制的是第几趟循环,
{
for (int j = 0; j < array.Length-1-i; j++) // 里面循环,控制每一趟循环对比的次数,每次都从第一个元素开始对比
{
if (array[j] > array[j + 1]) // 里面循环的索引,代表具体对比的数据的大小
{
int temp = array[j];
array[j] = array[j+1];
array[j + 1] = temp;
}
}
}
for(int i = 0; i < array.Length; i++)
{
Console.WriteLine(array[i]);
}