返回值

Java编程的逻辑 (11) - 初识函数

情到浓时终转凉″ 提交于 2020-01-29 21:12:41
本系列文章经补充和完善,已修订整理成书《Java编程的逻辑》,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接 : http://item.jd.com/12299018.html 函数 前面几节我们介绍了数据的基本类型、基本操作和流程控制,使用这些已经可以写不少程序了。 但是如果需要经常做某一个操作,则类似的代码需要重复写很多遍,比如在一个数组中查找某个数,第一次查找一个数,第二次可能查找另一个数,每查一个数,类似的代码都需要重写一遍,很罗嗦。另外,有一些复杂的操作,可能分为很多个步骤,如果都放在一起,则代码难以理解和维护。 计算机程序使用 函数这个概念来解决这个问题,即 使用函数来减少重复代码和分解复杂操作,本节我们就来谈谈Java中的函数,包括函数的基础和一些细节。 定义函数 函数这个概念,我们学数学的时候都接触过,其基本格式是 y = f(x),表示的是x到y的对应关系,给定输入x,经过函数变换 f,输出y。程序中的函数概念与其类似,也有输入、操作、和输出组成,但它表示的一段子程序,这个子程序有一个名字,表示它的目的(类比f),有零个或多个参数(类比x),有可能返回一个结果(类比y)。我们来看两个简单的例子: public static int sum(int a, int b){ int sum = a +

ctypes获取扩展模块中函数的返回值

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-29 15:11:50
ctypes获取返回值 我们前面已经看到了,通过ctypes像扩展模块中的函数传参时是没有问题的,但是我们如何拿到返回值呢?我们之前都是使用printf直接打印的,但是这样显然不行,我们肯定是要拿到返回值去做一些别的事情的。那么我们看看如何使用ctypes获取函数的返回值。 获取整型返回值 int test1(int a, int b) { int c; c = a + b; return c; } void test2() { } 我们定义了两个函数,下面编译成dll文件,dll文件名叫做mmp.dll from ctypes import * lib = CDLL("./mmp.dll") print(lib.test1(25, 33)) # 58 print(lib.test2()) # 125387149 我们看到对于test1的结果是正常的,但是对于test2来说即便返回的是void,在python中依旧会得到一个整型,但是这个结果肯定是不正确的。不过对于整型来说,是完全没有问题的。 当然我们后面还会遇到一个问题,这里提前说一下。扩展模块中的函数不要说返回void,即便返回一个char *,那么在python中得到的依旧是一个整型。这个是不同语言的类型不同造成的,正如我们传递参数一样,需要使用ctypes转化一下,那么在获取返回值的时候

Lua学习笔记_协同程序coroutine

跟風遠走 提交于 2020-01-28 16:07:20
协同程序中的返回值   可以写在 coroutine.yield(返回值,返回值.....) ,也可以直接 return 返回值,返回值.....    coroutine.yield 和 coroutine.resume 都是可以 拥有多个返回值的!     coroutine.resume 的第一个返回值用来表示协程是否执行成功; 从 第二个开始往后 的返回值是 coroutine.yield 所返回的 。    coroutine.yield 的返回值是由 coroutine.resume 传入的, 即 coroutine.resume 的 参数(除了第一个参数以外的)。 关于协同程序内部和外部(主程序)的数据交流    下面是一段 菜鸟教程 的代码以及执行结果: 1 function foo (a) 2 print("foo 函数输出", a) 3 return coroutine.yield(2 * a) -- 返回 2*a 的值 4 end 5 6 co = coroutine.create(function (a , b) 7 print("第一次协同程序执行输出", a, b) -- co-body 1 10 8 local r = foo(a + 1) 9 10 print("第二次协同程序执行输出", r) 11 local r, s = coroutine

7. lang包介绍 (番队1主要成员介绍)

别等时光非礼了梦想. 提交于 2020-01-28 13:54:22
图源:https://blog.csdn.net/weixin_43915808/article/details/91474659 java 的核心包 lang 包,在 java 的 “护庭十三队” 里属于第一队。 介绍一下它的成员: Object 类 第一队队长, Object ,其身份不言而喻。 Object 是所有类的超类, Object类中定义了一些有用的方法, 这些方法在其他类中都存在 ,一般通过重载或者重写覆盖,实现给子类的具体功能。 equals : 返回值为boolean ,比较两个对象是否相同 hashCode : 返回值 int ,返回对象的哈希码值。 toString : 返回值类型 String ,返回对象的字符串表示形式。 包装类 一队成员, 负责装箱、拆箱,类型转换等日常任务。 自动装箱:自动将基本数据类型转换成包装类 Integer i = 1; 自动拆箱: 自动将包装类转成基本数据类型,如 Integer i = 2; int n = i; 为什么要有包装类? 我们知道 Java 是一个面向对象的编程语言,基本类型不具有对象的性质,为了让基本类型也是对象的特征,就出现了包装类型,它的作用: 将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。 包装类和基本数据类型的区别 声明方式不同: 基本类型不是用

c++指针作为形参常见问题--1

邮差的信 提交于 2020-01-28 03:45:53
【错误案例1】 错误原因,函数createCharLink中定义的指针p虽然是在堆上申请的内存空间,但是函数createCharLink没有返回值,所以main函数中的指针p未定义,因此编译未通过。解决办法是,把指针p的声明放在main函数体外,紧跟结构体charlink的定义之后,并且仅仅在createCharLink函数中定义它。或者,把createCharLink更改为返回值为CharLink *类型的函数。 #include<iostream> #include<cstddef> #include<cstdio> #include<cstdlib> #include<cstring> using namespace std; typedef struct charlink { char ch; struct charlink *next; }CharLink; //CharLink *p; //在此处,取消注释这一句 void createCharLink(const char *str1) { CharLink *p = (CharLink*)malloc(sizeof(CharLink)); //删除或者注释掉这一句 // p = (CharLink*)malloc(sizeof(CharLink)); //修改办法,取消注释这一句 p->next=0; while(

Objective-C—— Block

南笙酒味 提交于 2020-01-28 00:33:06
OC Block 其实功能就类似C语言的函数指针,js中的闭包之类的。把代码块当做一个变量就行操作,有自己的变量和作用域。 简单看一下Block的语法和可能出现的问题: Block语法: block语法相对宽松,很多部分都可以省略,常规上我们实现一个block需要有以下几个部分 ^ 返回值类型 参数列表 表达式 例如 ^int (int count){return count+1;};//返回值为int 参数为int 表达式为 count+1; ^void (void){NSLog(@"void");}; //返回值为void 参数void 表达式为 NSLog(@"void"); 可以看到语法相对简单,而且返回值类型可以省略那么以上两个block就变 ^(int count){return count+1;}; ^(void){NSLog(@"void");}; 如果不适用参数,那么返回值列表也可以省略 ^(int count){return count+1;}; ^{NSLog(@"void");}; Block类型变量 Blcok类型的变量可以接受对应的Block,上例中两个Block就需要以下两种Block类型变量接收 int (^intBlock)(int) = ^(int count){return count+1;}; void (^voidBlock)(void)

shell获取函数的返回值

巧了我就是萌 提交于 2020-01-27 07:57:19
背景: 定义了一个函数,比对本地和线上服务器集群数量差别,想要获取不同集群的个数。shell和其他语言的函数返回值还是差别挺大的。 定义一个函数 functionname(){ 操作内容 echo 输出内容 return 返回值 #返回值可有可不有 } 获得函数的返回值 1.函数默认是将标准输出传递出来,不是返回值。 所以如果直接调用functionname,实际上是将输出传递回来 例如: a=`functionname` 将函数functionname的标准输出传递给a 2.调用函数不需要加(),直接写函数名就可以 functionname 3.使用$?接收上一程序的返回值状态,也就是return的值 functionname echo $? 这里输出的是函数的返回值 4.函数的返回值一般是0和1,表示成功和失败,如果一定要返回其他整数,定义一个全局变量,在函数中改变它 遇到的问题: 将函数返回值赋值时报错: return: diffrentcluster: numeric argument required 虽然不影响使用,但看着总是不好,查了一下说shell的函数默认是返回0和1来表示是否成功的,如果一定要返回值的话,可以在函数外定义一个全局变量,然后在函数中赋值这个变量。这样调用函数后,全局变量就变了,达到同样的效果 例如:通过函数增加num值 #!/bin/sh num

函数参数,返回值,递归函数

人走茶凉 提交于 2020-01-27 03:53:47
函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的作用 函数根据 有没有参数 以及 有没有返回值 ,可以 相互组合 ,一共有 4 种 组合形式 无参数,无返回值 无参数,有返回值 有参数,无返回值 有参数,有返回值 定义函数时, 是否接收参数,或者是否返回结果 ,是根据 实际的功能需求 来决定的! 如果函数 内部处理的数据不确定 ,就可以将外界的数据以参数传递到函数内部 如果希望一个函数 执行完成后,向外界汇报执行结果 ,就可以增加函数的返回值 1.1 无参数,无返回值 此类函数,不接收参数,也没有返回值,应用场景如下: 只是单纯地做一件事情 ,例如 显示菜单 在函数内部 针对全局变量进行操作 ,例如: 新建名片 ,最终结果 记录在全局变量 中 注意: 如果全局变量的数据类型是一个 可变类型 ,在函数内部可以使用 方法 修改全局变量的内容 —— 变量的引用不会改变 在函数内部, 使用赋值语句 才会 修改变量的引用 1.2 无参数,有返回值 此类函数,不接收参数,但是有返回值,应用场景如下: 采集数据,例如 温度计 ,返回结果就是当前的温度,而不需要传递任何的参数 1.3 有参数,无返回值 此类函数,接收参数,没有返回值,应用场景如下: 函数内部的代码保持不变,针对 不同的参数 处理 不同的数据 例如 名片管理系统 针对

【Java】多线程初探

拟墨画扇 提交于 2020-01-27 02:31:03
参考书籍: 《Java核心技术 卷Ⅰ 》 Java的线程状态 从操作系统的角度看,线程有5种状态:创建, 就绪, 运行, 阻塞, 终止(结束)。如下图所示 而Java定义的线程状态有: 创建(New), 可运行(Runnable), 阻塞(Blocked), 等待(Waiting), 计时等待(Time waiting) 被终止(Terminated)。 那么相比起操作系统的线程状态, Java定义的线程状态该如何解读呢? 如下: 1. Java的阻塞、 等待、 计时等待都属于操作系统中定义的阻塞状态,不过做了进一步的划分,阻塞(Blocked)是试图获得对象锁(不是java.util.concurrent库中的锁),而对象锁暂时被其他线程持有导致的;等待(Waiting)则是调用Object.wait,Thread.join或Lock.lock等方法导致的;计时等待(Time waiting)则是在等待的方法中引入了时间参数进入的状态,例如sleep(s) 2. Java的Runnable状态实际上包含了操作系统的就绪和运行这两种状态, 但并没有专门的标识进行区分,而是统一标识为Runnable 获取当前线程的状态和名称 currentThread()是Thread类的一个静态方法,它返回的是当前线程对象 对某个线程对象有以下方法: getState方法:返回该线程的状态