方法综合练习:out、params、ref
using System; namespace ConsoleApp1
{
class Program
{
/// <summary>
/// 求两个参数之间的最大值
/// </summary>
/// <param name="n1">第一个值</param>
/// <param name="n2">第二个值</param>
/// <returns></returns>
public static int GetMax(int n1, int n2)//这里的你n1和n2是形参,形式上的参数
{
int max = n1 > n2 ? n1 : n2;
return max;
}
static void Main(string[] args)
{
int a1 = 22;
int a2 = 33;
int max=GetMax(a1, a2);//这里的a1,a2是实参,实际上存在的参数 不管是形参还是实参,都是在内存中开辟了空间的
Console.WriteLine(max);
Console.ReadKey();
}
}
}
using System; namespace ConsoleApp2
{
class Program
//读取输入的整数,定义成方法,多次调用,如果用户输入的是数字则返回,否则提示用户输入错误
//注意:方法的功能一定要单一,最忌讳的就是提示用户输入的字眼
{
//public static void Number(string number)
//{
// while (true)
// { // Console.WriteLine("请输入一个数字,我们将它返回");
// try
// {
// int n = Convert.ToInt32(Console.ReadLine());
// Console.WriteLine(n);
// break;
// }
// catch
// {
// Console.WriteLine("请您重新输入");
// }
// }
//}
static void Main(string[] args)
{
Console.WriteLine("请输入一个数字");
string input = Console.ReadLine();
int number = GetNumber(input);
Console.WriteLine(number);
}
/// <summary>
/// 接收用户输入的一个整数并把它输出,如果输入的不是整数则显示重新输入
/// </summary>
/// <param name="s">接收用户输入的一个值 </param>
/// <returns></returns>
public static int GetNumber(string s )
{
while (true)
{
try
{
int number = Convert.ToInt32(s);
return number;
}
catch
{
Console.WriteLine("请重新输入");
s = Console.ReadLine();
}
}
}
}
}
using System; namespace ConsoleApp3
{
class Program
{
/// <summary>
/// 计算一个数组的总和
/// </summary>
/// <param name="nums">给定数组</param>
/// <returns>返回一个总和的值</returns>
public static int GetSum(int[] nums )
{
int sum = 0;
for (int i = 0; i < nums.Length ; i++)
{
sum += nums[i];
}
return sum;
}
static void Main(string[] args)
{ //定义一个方法,计算一个数组的总和
int[] num = { 1, 2, 4, 5, 3, 6, 7, 8, 9 };
int sums = GetSum(num);
Console.WriteLine(sums);
Console.ReadKey();
}
}
}
out参数的使用
using System; namespace out参数的使用
{
class Program
{
static void Main(string[] args)
{
///out 参数
///如果你在一个方法中,返回多个相同类型的值的时候,可以考虑返回一个数组
///但是,如果返回多个不同类型的值的时候,返回数组就不行了,那么这个时候我们可以考虑使用out参数
///out参数侧重于在一个方法中可以返回多个不同类型的值
int[] numbers = { 12, 4, 5, 63, 78, 99, 4, 5, 6 };
int max1;//这里不需要赋值是因为在方法里已经赋值过,这里传参之后,参数等同于方法里面的已经赋值的参数
int min1;
int sum1;
int avg1;
string s1;
bool b1;
Avg(numbers, out max1, out min1, out sum1, out avg1, out s1, out b1);
//参数不一定要跟方法里面的一样,只需要方法里面对应位置一样就行,这里是传递参数 Console.WriteLine(max1);
Console.WriteLine(min1);
Console.WriteLine(sum1);
Console.WriteLine(avg1);
Console.WriteLine(s1);
Console.WriteLine(b1);
Console.ReadKey();
}
/// <summary>
/// 建立一个方法,返回一个数组的最大值最小值总和以及平均值
/// </summary>
/// <param name="num">要求值的数组</param>
/// <param name="max">最大值</param>
/// <param name="min">最小值</param>
/// <param name="sum">总和</param>
/// <param name="avg">平均值</param>
/// <param name="s">字符串</param>
/// <param name="b">bool值</param>
public static void Avg(int[] num, out int max, out int min, out int sum, out int avg, out string s, out bool b)//注意这里没有设定返回值
{
//out参数要求方法的内部必须为其赋值
max = num[0];
min = num[0];
sum = num[0];
avg = num[0];
s = "123";
b = true;
for (int i = 0; i < num.Length; i++)
{
if (num[i] > max)
{
max = num[i];
}
if (num[i] < min)
{
min = num[i];
}
sum += num[i];
}
avg = sum / num.Length; }
}
}
out参数小练习
using System; namespace out参数小练习
{
class Program
{
///题目:分别提示用户输入用户名以及密码
///你写一个方法来判断用户输入的是否正确
///返回给用户一个登录结果,并且还要单独的返回给用户一个登陆信息
///如果用户名错误,除了返回登录结果之外,还有返回一个用户名错误,密码错误
static void Main(string[] args)
{
Console.WriteLine("请输入用户名");
string username = Console.ReadLine();
Console.WriteLine("请输入密码");
string userpassword = Console.ReadLine();
string s;
bool b = IsLogin(username, userpassword, out s);
Console.WriteLine(b);
Console.WriteLine(s);
Console.ReadKey();
}
/// <summary>
/// 提示输入用户名跟密码,返回一个登陆结果加一个登陆信息
/// </summary>
/// <param name="name">输入的用户名</param>
/// <param name="password">输入的密码</param>
/// <param name="message">返回的登陆信息</param>
/// <returns></returns>
public static bool IsLogin(string name,string password,out string message)
{
if (name == "admin" && password == "88888888")
{
message = "登陆成功";
return true;
}
else if (name == "admin")
{
message = "登陆失败,密码错误";
return false;
}
else if (password == "88888888")
{
message = "登陆失败,用户名错误";
return false;
}
else
{
message = "登陆失败,用户名跟密码都错了";
return false;
}
}
} }
params可变参数
using System; namespace params可变参数
{
class Program
{
///params可变参数
///将实参列表中跟可变参数数组类型一致的元素都当作数组的元素去处理
///params可变参数必须是形参列表中的最后一个元素,如果它后面还跟其他元素,那它将无法识别最后那个参数是什么
///一个参数列表中只能用一个params可变参数,理由还是必须在最后面的元素
static void Main(string[] args)
{
Test("张三", 99, 88, 77, 66, 44, 33, 22, 11);
Console.ReadKey ();
}
public static void Test(string name,params int[] score)
{
int sum = 0;
for (int i = 0; i < score.Length ; i++)
{
sum += score[i];
}
Console.WriteLine("{0}这次考试的总成绩{1}", name, sum);
}
}
}
using System; namespace params参数的使用练习
{
class Program
{
static void Main(string[] args)
{
//求任意长度数组的和,整数类型的
int sums = GetSum(1, 2, 3, 4, 5, 6, 7, 8, 9);
Console.WriteLine(sums);
Console.ReadKey();
}
public static int GetSum(params int[] nums)
{
int sum = 0;
for (int i = 0; i < nums.Length; i++)
{
sum += nums[i];
}
return sum;
}
}
}
ref参数
using System; namespace ref参数的使用
{
class Program
{
static void Main(string[] args)
{
//ref参数是将变量以参数的形式传递到方法中,变换完成之后再把改变后的值传递出来
//ref参数要求在方法外必须为其赋值,而方法内可以不赋值。因为有值之后才可以在方法内改变
int n1 = 10;
int n2 = 20;
Change(ref n1, ref n2);
Console.WriteLine(n1);
Console.WriteLine(n2);
Console.ReadKey();
}
public static void Change(ref int n1,ref int n2)
{
int temp = n1;
n1 = n2;
n2 = temp;
}
}
}
方法的递归
using System; namespace 方法的递归
{
class Program
{
static void Main(string[] args)
{
///方法的递归就是重复不停的自我调用,在达到某种条件后结束
///每调用一次,相当于进一个门,用return来跳出方法的时候只能跳出当前的这个门
///如果调用了10次,那么跳出的话也要执行10次,才可以真正跳出程序
TellStory();
Console.ReadKey ();
}
public static int i = 0;//声明一个静态字段,在哪里都能用的那种 public static void TellStory()
{
Console.WriteLine("从前有座山");
Console.WriteLine("山里有座庙");
Console.WriteLine("庙里有个老和尚和小和尚,老和尚讲故事给小和尚听,讲什么呢?");
i++;
if(i>=10)
{
return;
}
TellStory();
}
}
}
方法的调用
using System; namespace 方法的调用
{
class Program
{
static void Main(string[] args)
{
//在一个函数中调用另外一个函数,称为调用者和被调用者
///如果被调用者想要得到调用者的值
///1、传递参数
///2、使用静态字段来模拟全局变量
///如果调用者想要得到被调用者的值:
///返回值
bool b = IsRun(2000);
Console.WriteLine(b);
}
/// <summary>
/// 判断所给参数是否为闰年
/// </summary>
/// <param name="year"></param>
/// <returns></returns>
public static bool IsRun(int year)
{
bool b = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
return b;
}
}
}
方法的重载
using System; namespace 方法的重载
{
class Program
{
static void Main(string[] args)
{
//方法的重载
///方法的重载指的就是方法的名称相同,参数不同
///1、如果参数的个数相同,那么参数的类型就不能相同
///2、如果参数的类型相同,那么参数的个数就不能相同
///***方法的重载跟返回值没有关系
Console.WriteLine("Hello World!");
}
public static void M1(int n1, int n2)
{
int result = n1 + n2;
}
public static double M1(int n1,int n2,int n3)
{
n3 = n1 + n2;
return n3;
}
public static string M1(string n1,string n2)
{
return n1 + n2;
}
} }
方法的综合练习
using System; namespace 方法的综合练习
{
class Program
{
static void Main(string[] args)
{
///用方法实现,有一个字符串数组:
///{“马龙”,“迈克尔乔丹”,“雷吉米勒”,“蒂姆邓肯”,“科比布莱恩特”}
string[] names = { "马龙", "迈克尔乔丹", "雷吉米勒", };
Console.WriteLine("Hello World!");
}
}
}
方法综合练习:out、params、ref的更多相关文章
- C# 参考之方法参数关键字:params、ref及out
如果在为方法声明参数时未使用 ref 或 out,则该参数可以具有关联的值.可以在方法中更改该值,但当控制传递回调用过程时,不会保留更改的值.通过使用方法参数关键字,可以更改这种行为. params ...
- c#params ref out
params params 关键字可以指定在参数数目可变处采用参数的方法参数. 在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字. 示例: ...
- c#中的Out, params,ref 细说并沉淀
1. Out,params,ref之前先记录平时用的最多的按值传递参数的情况,当然默认情况下参数传入函数的默认行为也是按值传递的. 1: //默认情况下参数会按照值传递 2: static int a ...
- (Gorails视频)使用推广链接(params[:ref]),增加注册用户!
用一个链接进行用户的注册推广: 我的git: https://github.com/chentianwei411/embeddable_comments 用途:比如推广,拉朋友注册,给推广码,用这 ...
- C#的参数修饰符out,params,ref
using System; namespace ParamsProgram { class TestParams { public static void Main(string[] args)//s ...
- nodejs取参四种方法req.body,req.params,req.param,req.body
摘要: nodejs取参四种方法req.body,req.params,req.param,req.body 获取请求很中的参数是每个web后台处理的必经之路,nodejs提供了四种方法来实现. 获取 ...
- C#总结---方法的out参数和ref参数
我们知道,在c#中,当我们在一个方法中想要访问另一个方法中的变量的时候,有两种解决方案---参数和返回值.但当需要返回多个值,并且是不同类型的值的之后应该怎么办呢?解决方案可以是 (1)将所有类型数据 ...
- 67.nodejs取参四种方法req.body,req.params,req.param,req.body
转自:http://www.cnblogs.com/jkingdom/p/8065202.html 摘要: nodejs取参四种方法req.body,req.params,req.param,req. ...
- 方法的可变参数 params
当你写了一个方法,这个方法需要对传进来的参数进行加工,但是不确定传递的参数的数量的时候 比如,public void int jiafa(int a,int b){a+b;} jiafa(1,2) 但 ...
- C#中引用类型的变量做为参数在方法调用时加不加 ref 关键字的不同之处
一直以为对于引用类型做为参数在方法调用时加不加 ref 关键字是没有区别的.但是今天一调试踪了一下变量内存情况才发现大有不同. 直接上代码,结论是:以下代码是使用了 ref 关键字的版本.它输出1 ...
随机推荐
- unity 实现Game窗口的Stats 【转自蛮牛】
using UnityEngine;using System.Text;using UnityEditor; public class ShowFps : MonoBehaviour{ public ...
- VsCode轻松使用docker容器-Remote Containers
VsCode轻松使用docker容器-Remote Containers 演示视频:BiliBili 使用docker容器过程中,最常见的操作是进入容器内查看文件.修改配置等操作 以前 使用shell ...
- iOS开发之权限申请说明key
我们申请不同的权限需要对应的key,在info.plist内加上对用户的提示语 麦克风权限 NSMicrophoneUsageDescription 相机权限 NSCameraUsageDescrip ...
- Unity动态修改材质球RenderingMode属性
Material四个模式 动态修改代码 using System.Collections; using System.Collections.Generic; using UnityEngine; p ...
- flask-基础篇03 请求钩子与上下文
一.异常处理 1.HTTP 异常主动抛出 ①abort 方法: 抛出一个给定状态代码的 HTTPException 或者 指定响应,例如想要用一个页面未找到页面未找到异常来终止请求,你可以调用 abo ...
- [656] C4 Scions Of Destiny Opcodez
[656] C4 Scions Of Destiny Client 00 SendProtocolVersion 01 MoveBackwardToLocation 02 Say 03 Request ...
- Jenkins提供了哪些功能
我的这篇文章仅仅是简单的根据上文,介绍Jenkins提供了哪些功能.具体大家还是要自己学习啦~ 官网首页就提供了windows版本的Jenkins安装包.我们可以下载一个用于学习.安装后自动打开htt ...
- 原始的jdbc
jdbc的概念 什么是jdbc? jdbc是java数据库连接.为多种关系型数据库提供统一的访问. jdbc的操作步骤 导入jar包 加载驱动 获取数据库连接 获取执行者对象 执行SQL语句 处理结果 ...
- Kongmaster
圣人处无为之事 大智若愚 穷则独善其身,达则兼济天下
- vue整体回顾
vue大回顾 1 前端发展史 react vue---> 前端工程化---> 前后端分离 大前端:flutter uni-app 2 Vue介绍 单页面应用(spa) 组件化开发 mvvm ...