函数
函数的定义:
函数就是定义在类中的具有特定功能的一段独立小程序,并能被多次使用。
函数的格式:
权限修饰符 函数类型修饰符 返回值类型 函数名(
参数类型 形式参数1, 参数类型 形式参数2, ...){
执行语句; return 返回值; }
如何定义函数:
函数就是一个功能,功能就需要两部分:
- 函数运行时有未知参数吗
- 函数运行完的结果是什么
在main函数如果要调用非静态方法,必须使用构建对象的方法
函数的分类:
- 有没有参数
- 有没有返回值
- 定义者:系统函数 第三者 自定义函数
函数重载:
函数名称相同,函数的参数的个数或者类型不同,调用的时候,自动匹配对应的函数
方法的重载(overloading)
指多个方法带有不同的参数,使用相同的方法名。
与返回值和修饰符没有关系
只需一个方法名,就能拥有多个不同的功能。
重载的规则
含有的参数数目不同
含有的参数类型不同
含有的参数顺序不同
例:
原始方法:
int add(int a,int b) {…}
错误的重载方法:
float add(int a,int b){…}
int add(int c,int d){…}
正确的重载方法:
int add(int a,int b,int c)
int add(float a,float b)
float add(int a,float b)
int add(float a,int b)
注: java中不允许参数个数或参数类型完全相同,而只有返回值的类型不同的重载。
class Myplus
{
int plus(int a,int b)
{
int s;
s=a+b;
return s;
}
int plus(int a,int b,int c)
{
int s;
s=plus(a,b)+c;
return s;
}
int plus(int a,int b,int c,int d)
{
int s;
s=plus(a,b,c)+d;
return s;
}
}
public class overLoad {
public static void main(String[] args) {
Myplus p=new Myplus();
System.out.println(p.plus(2,3));//5
System.out.println(p.plus(9,10,11));//30
System.out.println(p.plus(5,15,25,35));//80
}
}
函数递归:
递归的定义:函数自身调用自身
递归式的内存模型:
- 优点:分治理念的体现,可以把非常复杂的问题,简单化
- 缺点:非常消耗内存,当栈被全部占用后,触发StackoverfiowError异常
例子:
public static void main(String[] args) {
System. out .println (getCount2 (100)) ;
public static int getCount2(int n){
if (n==1){
return 1;}
}
return n + getCount2(n-1);//结果会是从一到100的值相加
}
例子:求斐波那契数列的第n项的数
public class homework001 {
public static void main(String[] args) {
System. out .println (fibo(10)) ;//这边是第10项的数
}
public static int fibo(int n){
if (n==1|n==2)
{return 1;
}
return fibo(n-1) + fibo(n-2);
}
}
例子:上楼梯问题:某个人上楼梯,每次只能上一个台阶或者俩个台阶,
那么当这个到达第n个台阶时,共有多少种走法。
import java.util.Scanner;
public class homework001 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System. out .print("请输入你要的台阶数:") ;
int a = sc.nextInt();
System. out .println (fibo(a)) ;
}
public static int fibo(int n){
if (n<0)
{return 0;
}
else if (n==0)
{return 1;
}
return fibo(n-1) + fibo(n-2);
}
}
- 注意:可以使用java -X -Xss 大小, 来调整JVM的栈大小空间
-Xms<大小> 设置初始 Java 堆大小
-Xmx<大小> 设置最大 Java 堆大小
Math类
//绝对值
System.out.println(Math.abs(5));
// ceil(天花板)
// 向上取整
System.out.println(Math.ceil(5.1));
// floor(地板)
// 向下取整
System.out.println(Math.floor(5.1));
// 四舍五入
System.out.println(Math.round(5.4));
// 最大值和最小值
System.out.println(Math.max(5,100));
System.out.println(Math.min(5,100));
// 幂次方
System.out.println(Math.pow(5,2));
// random函数返回的伪随机数
System.out.println(Math.random());
Scanner类
一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。
- Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以
使用不同的 next 方法将得到的标记转换为不同类型的值。
String next() :查找并返回来自此扫描器的下一个完整标记。 - boolean nextBoolean() :扫描解释为一个布尔值的输入标记并返回该值。
- byte nextByte() :将输入信息的下一个标记扫描为一个 byte 。
- double nextDouble() :将输入信息的下一个标记扫描为一个 double 。
- float nextFloat() :将输入信息的下一个标记扫描为一个 float 。
- int nextInt() :将输入信息的下一个标记扫描为一个 int 。
- String nextLine() :此扫描器执行当前行,并返回跳过的输入信息。
- long nextLong() :将输入信息的下一个标记扫描为一个 long 。
- short nextShort() :将输入信息的下一个标记扫描为一个 short
Random类
此类的实例用于生成伪随机数流。 boolean nextBoolean() :返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 boolean 值。 double nextDouble() :返回下一个伪随机数,它是取自此随机数生成器序列的在 0.0 和 1.0 之间均匀分布的 double 值。 int nextInt() :返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。 int nextInt(int n) :返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定 值(不包括)之间均匀分布的 int 值
String类
定义:
String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实
现。 字符串是常量;它们的值在创建之后不能更改,因为 String 对象是不可变的,所以可以共享。
获取相关
- char charAt(int index) :返回指定索引处的 char 值。
- int indexOf(int ch) :返回指定字符在此字符串中第一次出现处的索引。
- int indexOf(int ch, int fromIndex) :返回在此字符串中第一次出现指定字符处的索引,从指索引开始搜索。
- int indexOf(String str) :返回指定子字符串在此字符串中第一次出现处的索引
- 。int indexOf(String str, int fromIndex) :返回指定子字符串在此字符串中第一次出现处的索引从指定的索引开始。
- int lastIndexOf(int ch) :返回指定字符在此字符串中最后一次出现处的索引。
- int length() :返回此字符串的长度。String[] split(String regex) : 根据给定正则表达式的匹配拆分此字符串。String substring(int
- beginIndex) :返回一个新的字符串,它是此字符串的一个子字符串。String substring(int beginIndex, int endIndex) :返回一个新字符串,它是此字符串的一个子字符串。
案例:
判断一个数据是否是回文数
import java.util.Scanner; public class IsStringAPalindrome {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); System.out.print("Enter a string:");
String s = scanner.nextLine();
int l = 0; int r = s.length() - 1;
while (l <= r) { if (s.charAt(l) != s.charAt(r)) { System.out.println("Is not a palindrome");
return; }l++; r--; }
System.out.println("Is a palindrome"); } }