java函数方法
1.方法重载
(1)源代码
// MethodOverload.java
// Using overloaded methods
public class MethodOverload {
public static void main(String[] args) {
System.out.println("The square of integer 7 is " + square(7));
System.out.println("\nThe square of double 7.5 is " + square(7.5));
}
public static int square(int x) {
return x * x;
}
public static double square(double y) {
return y * y;
}
}
(2)程序截图:
(3)分析结果,有什么特殊之处吗
这个程序展示了方法的重载,方法的名字相同,但是参数不一样,而且这两个方法都可以调用,互不影响,只是结果不一样。
满足重载的条件:
(1)方法名相同;
(2)参数类型不同,参数个数不同,或者是参数类型的顺序不同。
(3)还需要注意一点:
方法的返回值不作为方法重载的判断条件,和方法的参数有关。
在我们常用的函数方法中就有重载的,系统给出的,有好多就是只有参数不同,进行重载。
2. 使用计算机计算组合数:
内容要求(1)使用组合数公式利用n!来计算(2)使用递推的方法用杨辉三角形计算(3) 使用递归的方法用组合数递推公式计算
1)源代码
import java.util.Scanner;
//(1)使用组合数公式利用n!来计算(2)使用递推的方法用杨辉三角形计算(3) 使用递归的方法用组合数递推公式计算
public class suanfashu {
public static void main(String args[])
{
System.out.println("组合数:"+s1(8,5));
long s;
s=s2(8)/(s2(5)*s2(8-5));
System.out.println("组合数:"+s);
}
static long s1(int n,int k)//第一种方法,用递推方法求组合数
{
long Cnn=1,Ckk=1,Cnk=1;
for(int i=1;i<=n;i++)
{
Cnn=Cnn*i;
}
for(int i=1;i<=k;i++)
{
Ckk=Ckk*i;
}
for(int i=1;i<=n-k;i++)
{
Cnk=Cnk*i;
}
return Cnn/(Ckk*Cnk);
}
static //第二种方法,递归
long s2(int n)
{
if(n==0||n==1)return 1;
return n*s2(n-1);
}
}
2)编译错误
利用递归方法是必须要有终结的条件,没有终结条件时就会报错,在写函数时必须要有static,不然就不能运行出来了,还有String args[]也必须要有,否则就不能找到函数main函数了,不能运行。
3)结论
递归就是“自己调用自己”,特点有他的递归是先从大到小,再从小到大;
每个步骤要干的事情都是类似的,只不过其规模“小一号”;必须要保持递归调用的过程可以终结,每个递归函数一定有一个控制递归可以终结的变量;
递推”是“从前到后”,先求第1项,然后,在此基础上求第2项,第3项,直至第n项,通常可以直接使用循环语句实现。
4)截图
5)设计思想
组合数求值,用到了递归和递推,用两个方法,分别表示这两种方法,之后在主方法中调用这两种方法,输出结果。
3.
(1)源代码
import java.math.BigInteger;
import java.util.Scanner;
public class CalculateN {
/**
* @param args
*/
public static void main(String[] args) {
System.out.print("请输入N:");
Scanner scanner=new Scanner(System.in);
int number=scanner.nextInt();
System.out.println(number+"!="+calculateN2(number));
}
public static long calculateN(int n) {
if(n==1 || n==0){
return 1;
}
return n*calculateN(n-1);
}
public static BigInteger calculateN2(int n) {
if(n==1 || n==0){
return BigInteger.valueOf(1);
}
return BigInteger.valueOf(n).multiply(calculateN2((n-1)));
}
}
(2)程序结果截图
(3)结果分析
结果是负数,本来应该是整数的,但是由于阶乘后结果太大,超出范围,所以就会出现乱码,可以用到大数来表示,这样就不会出现溢出的情况了。
public static BigInteger calculateN2(int n) {
if(n==1 || n==0){
return BigInteger.valueOf(1);
}
return BigInteger.valueOf(n).multiply(calculateN2((n-1)));
}
改后的截图:
不会有溢出了。
4.汉诺塔问题
(1)源程序
package demo;
//用递归方式编程解决汉诺塔问题。
//陈晓阳 2016.10.19
public class TowersOfHanoi
{
//递归的移动塔上的盘子
public static void solveTowers( int disks, int sourcePeg,
int destinationPeg, int tempPeg )
{
// base case -- only one disk to move
if ( disks == 1 )//只剩一个盘子就退出
{
System.out.printf( "\n%d --> %d", sourcePeg, destinationPeg );
return;//return空,去掉后就会出错
}
//将disks-1个盘子借用目标塔从起始塔移动到中间塔
solveTowers( disks - 1, sourcePeg, tempPeg, destinationPeg );
//destinationPeg是最终的塔;sourcePeg表示起始塔, tempPeg表示中间塔
// 输出结果,从开始点->终点
System.out.printf( "\n%d --> %d", sourcePeg, destinationPeg );
// 移动中间塔上的disks-1个到目标塔
solveTowers( disks - 1, tempPeg, destinationPeg, sourcePeg );
}
public static void main( String[] args )
{
int startPeg = 1; // 开始位置设为1
int endPeg = 3; //目标塔设为3
int tempPeg = 2; // 中间塔设为2
int totalDisks = 3; // 盘子的个数
// 调用递归方法
solveTowers( totalDisks, startPeg, endPeg, tempPeg );
} // end main
} // end class TowersOfHanoi
(2)设计思想
首先将起始塔上的n-1个盘子移到中间塔上,借助目标塔;然后再将第n个移到目标塔上,中间塔上的n-1个盘子移到目标塔上,借助起始塔。移动借助一个方法,将方法写成递归函数,递归调用。
(3)结果截图
(4)编译结果分析:
首先一定要分析清楚是怎样移动的,将这些步骤写成函数,递归调用;每一次移动一定要输出。理解起来容易,但是程序写起来确实不太好写,理解程序有一些难。
5.回文数
(1)源程序
package demo;
import javax.swing.JOptionPane;
public class Number {
public static void main(String args[])
{
int number=0,d5,d4,d3,d2,d1;
String str=JOptionPane.showInputDialog("输入一个1到99999之间的数");
number=Integer.parseInt(str);//取所输入的数
if(number>=1&&number<=99999)//判断number是否在1-99999之间
{
d5=number/10000;//表示万位
d4=number%10000/1000;//表示千位
d3=number%1000/100;//表示百位
d2=number%100/10;//表示十位
d1=number%10;//表示个位
if(d5>0)//判断是否是5位数,是的话就是否为回文数
{
System.out.println(number+"是5位数");
if(d5==d1&&d4==d2)
{
System.out.println(number+"是回文数");
}
else
{
System.out.println(number+"不是回文数");
}
}
else if(d4>0)//判断是否是四位数,如果是四位数就判断是否为回文数;否则就判断是否为三位数
{
System.out.println(number+"是4位数。");
if(d4==d1&&d3==d2)
{
System.out.println(number+"是回文数");
}
else
{
System.out.println(number+"不是回文数");
}
}
else if(d3>0)//判断是否是三位数,是三位数就判断是否是回文数,不是三位数就判断是否是两位数
{
System.out.println(number+"是3位数");
if(d3==d1)
{
System.out.println(number+"是回文数");
}
else
{
System.out.println(number+"不是回文数");
}
}
else if(d2>0)//判断是否是两位数,是的话就判断是否是回文数,不是就判断是否是一位数
{
System.out.println(number+"是2位数");
if(d2==d1)
{
System.out.println(number+"是回文数");
}
else
{
System.out.println(number+"不是回文数");
}
}
else if(d1!=0)
{
System.out.println(number+"是1位数");
System.out.println(number+"是回文数");
}
}
else
{
System.out.println(number+"不在1-99999之间");
}
}
}
(2)设计思想
输入一个数,判断是不是在1-99999之间,分别得到输入的数的各位上的数字,判断是几位数,接着判断是不是回文数,输出判断后的结果,要注意偶数位数和奇数位数不一样,偶数比较的是前一半和后一半,奇数比较的是前一半和后一半,中间剩下一个,不用比较。当是一位数时直接输出是回文数。
(3)结果截图
java函数方法的更多相关文章
- java函数方法学习
1.函数(方法)定义 类中特定功能小程序 2.函数定义格式 修饰符 返回值类型 函数名 (参数类型 形式参数) { 执行语句; return 返回值 } 函数功能实现的2个明确 1.这个功能的结果是什 ...
- paip.函数方法回调机制跟java php python c++的实现
paip.函数方法回调机制跟java php python c++的实现 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http:// ...
- JAVA基础语法:函数(方法)、类和对象(转载)
4.JAVA基础语法:函数(方法).类和对象 函数 在java中函数也称为方法,是一段具备某种功能的可重用代码块. 一个函数包括这几部分: 函数头 函数头包括函数访问修饰符,函数返回值类型, 函数名, ...
- Java:方法的参数是传值还是传引用
Java中方法的参数总是采用传值的方式. 下列方法欲实现对象的交换,但实际上是不能实现的. public void swap(simpleClass a,simpleClass b){ simpleC ...
- 初步认知java的方法
1.正确区分函数和方法: 面向对象的语言叫做方法,面向过程的语言叫做函数,两者的意义是一样的,只是叫法不同.java是面向对象的语言,所以用方法. 2.方法的定义: 就是有名字的代码段 3.方法的目的 ...
- java函数参数默认值
java函数参数默认值 今天,需要设定java函数参数的默认值,发现按照其它语言中的方法行不通 java中似乎只能通过函数的重载来实现 函数参数默认代码
- 几种任务调度的 Java 实现方法与比较
综观目前的 Web 应用,多数应用都具备任务调度的功能.本文由浅入深介绍了几种任务调度的 Java 实现方法,包括 Timer,Scheduler, Quartz 以及 JCron Tab,并对其优缺 ...
- JAVA本地方法详解,什么是JAVA本地方法?
一. 什么是Native Method 简单地讲,一个Native Method就是一个java调用非java代码的接口.一个Native Method是这样一个java的方法:该方法的实现由非j ...
- JS调用Java函数--DWR框架
(1)dwr与ssh框架整合教程dwr框架介绍. DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开发人员开发包含AJA ...
随机推荐
- react-navigation设置navigationOptions中Static中使用 this 的方法
使用react-navigation时,单页面设置navigationOptions中,进行Static中 调用this 中的方法或值时,需要做如下操作 static navigationOption ...
- 浅谈如何避免内存泄漏(out of memory)
1.在涉及使用Context时,对于生命周期比Activity长的对象应该使用Application的Context.凡是使用Context优先考虑Application的Context,当然它并不是 ...
- elasticsearch-ik
因lucene默认采用英文且英文通过空格就可以断句.而中文则是词组,如果不加载中文词库或插件则会变为一个一个字而非词组,因此需要加载中文词库. 不加分词库所看到的中文分词效果. post _analy ...
- vue - @click 用到的修饰符
1.vue提供的方法 .stop .prevent .capture .self .once .passive <!-- 阻止单击事件继续传播 --><a v-on:click.st ...
- Oracle 学习总结 - 问题诊断
搜集常用诊断sql https://blog.csdn.net/yangshangwei/article/details/52449489 lock相关: 1. 查看lock, 打开两个事物,事物1更 ...
- vue.js 初级之一
vue.js 是一个构建数据驱动的 web 界面 渐进式驱动框架. 引用的话,直接使用script标签引入就可以了: <script src="./lib/vue.js"&g ...
- Delphi中TApplication详解(转仅供自己参考)
转自:http://blog.sina.com.cn/s/blog_4d6f55d90100bmv9.html TApplication是用于Delphi应用程序的类型,该类在单元forms中声明.T ...
- Emac
https://emacs-china.org/ 启动 console模式的emacs,$emacs -nw 学习参考: 1)<21天精通emacs> 2)Emacs常用命令简集. 3)& ...
- SSL和TLS协议的区别
SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层.SSL通过互相认证.使用数字签名确保完整性.使用加密确保私密性,以实现客户 ...
- 自定义标签在IE6-8的困境
或许未来前端组件化之路都是自定义标签,但这东西早在20年前,JSTL已在搞了.现在Web Component还只有webkit支持.但一个组件库,还需要一个特殊的标识它们是一块的.不过这个XML已经帮 ...