函数

为什么有函数的存在

:解决那些重复且具有独立功能的代码段
例如石头剪刀布的题在对com和usr的所出的是什么进行标注的是后,两个switch的功能是一样的。

将这些具有独立功能的代码进行独立的代码进行封装,封装的结果得到一个函数;

降低了代码冗余,冗余(有大量的无用的代码),降低了主函数的代码量,将主函数进行适当的拆分,以便于内存优化,

就是将主函数模块化。

如何去定义一个函数

格式
访问权限 函数类型 返回值类型 函数名(函数列表){函数体
return 返回值;
}

访问权限
:指的是函数的适用范围(内部和外部)
常见关键字 public protected 默认(就是什么也不写)private
函数类型分类: 说的是函数的使用场景
:static :静态函数
默认(成员函数)
abstract 抽象函数
native(本地函数)
synchronized 同步函数
函数名
程序员自定义的名称

参数列表:参数列表有若干个参数类型,参数名组成 主要用于接受一些传递给函数的数据

函数体
:那些具有独立功能的代码段
return :仅仅表示结束当前函数,如果有返回值,则函数结束前将返回值返回给调用者

返回值:函数的计算结果,需要传递给外界 ,配合return使用

返回值类型 就是返回值的数据类型

class Q01{
public static void main(String[] srgs){
public 主函数是公开权

	static 主函数是静态函数

	void 数没有返回值
	main() 主函数的名称
	args 就是这个数据类型的变量名称
	String 表示的是一个字符串数组
	当我们在一个函数中么有找到return,并非指return没有 而是因为无返回值所以不用写,return 本是时表示结束当函数,如果函数有返回值,那么就必须是return 返回值。

需求计算a的b次幂(b是整数)

2^6
double sum=1;
for(int i=1;i<=6;i++)
sum*=2;
5^8
double sum=1;
for(int i=1;i<8;i++)
sum*=5;

两段代码相似但是去屋外再联系
所以下载定义一个函数
定义时 千万不要在一个函数内部据定义一个函数;只能定义在类里面,python c++中必须将函数定义在主函数前,而在Java中可以定义到主函数后面。

	public static double pow(double a,int b){
	if(b=0){
	return 0;
	}
	double sum=1;
	{for(int i=1;i<Math.abs(b);i++)
	sum*=a;
	}
	return b>0?sum:1/sum;

}
对于return的值要在主函数内定义一个变量去接收 例如

这个函数最终形式应该为

class Q{
	public static void main(String[] args){		int a=4;
		int b=4;
		double c=pow(a,b);//函数的调用并用c来接受这个函数的返回值
		System.out.println(c);
}
}
	//函数的定义
	public static double pow(double a;int b){		if(b=0){
			return 1;
			}
		double sum=1;
		for(int i=1;i<b;i++){
			sum*=a;
	
	}
	return b>0?sum:1/sum;
}
	

函数的分类 有返回值有参数 有返回值无参数 无返回值无参数 有返回值有参数

注意
有返回值的函 参与运算 输出 赋值
无返回值的函数 仅仅调用

函数传参

   /*
        基本数据类型传参 传的是常量在常量池中的地址
        引用数据类型传参 传的是对象在堆内存中的地址
        记住一点,实参——>形参 传的永远是地址
        
        基本数据类型 是原子型数据 就是不可再拆分
        引用数据类型 是复合型数据 当前对象数据中,其实还包括了其他更多的子数据
        int a,b,c;-> arr [a,b,c]
        人:姓名 年龄 性别 身高 体重....
        复合型数据 指的就是由多个基本数据或其他引用数据组成的一个数据
    
        形参变量永远不可能去改变实参中已储存的数据地址 除非return 实参且接收
        就算形参变量所存储的数据地址被改变 那也是改变形参自己 与实参无关
        无非是:
            实参本身指向的是一个对象
            然后把这个对象的地址传递给了形参
            形参就可以通过该地址去堆内存中找对象,可以修改对象中的数据
            实参再去访问对象时,对象中的数据就已经被改变
            因为实参和形参目前使用操作的都是同一个对象!
        
        终结总结:
        无论实参还是形参 实参就是把变量空间所存的地址给了形参而已
        他们都是变量!
        所以对于变量的修改而言,主要分两种!
        1.要么改变该变量空间所存储的地址
        int a=3;  
        a=7;
        int[] arr=new int[]{1,2,3};
        arr=new int[]{3,2,1};
        2.要么改变该变量空间所存储的地址所指向的那个对象中的数据
        int[] arr=new int[]{1,2,3};
        arr[0]=10;  
        对与基本数据类型而言,能否支持2操作 不能!
        */

参数 调用函数时该函数传递的数叫做实参
在函数中调用的参数时形参

而在定义函数的时候实参讲什么东西传递给了实参
1常量在常量池中的地址
2 对象在内存中的地址
主函数在向函数进行传参的时候,是将数在常量池中的地址给了形参,两个参数没有任何关联,只是存储的地址相同罢了,一旦在函数中对形参进行重新定义那么将没有任何关系

可变长参数

当我们再给一个函数进行传参的时候,如果不确定具体的参数个数的话,可以使用可变长参数(参数的类型必须是相同的)

class Q{
	public static void main(String[] args){
		System.out.println(a.length);
		for(int i=0;i<a.length;i++){
			System.out.println(a[i]);						
		}
		multiArgument(1,2,3,4,5,6,7);
		
	}
	//传入的是不确定个数的int型参数
	public static void multiArguments(int a ,int b,int...nums){
		//如果是mulitargument(int a ,int...nums,int c) 这样是编译不出来的,所以可变长参数必须在最后,因为输入的数int b 后的都进了可编程中,所以int c 没有值,而且在一个函数的调用中只能出现一个可变长参数
		//可变长参数其实就是一个数组
		System.out.println("a="+a);
		System.out.println("b="+b);
		System.out,println(nums.length);
		for(int i=0;i<nums.length;i++){
			System.out.println(nums[i]+" ");
			
		}
		System.out.println();
	}
}

局部变量
: 在函数中创建的变量称之为局部变量,局部变量仅仅作用于创建它的函数。

函数的栈
:函数和栈的关系相当于储存和内存的关系

在一段代码中
先执行主函数,这是将主函数移到栈中,如果在中韩中进行调用函数,这是究竟新的函数移到栈中进行调用,在运行完毕之后会将函数从栈中弹出,在代码最后虽然没写但是会有一个隐形的return 这是默认的,所以return的作用是将函数总栈中弹出,栈中函数全部被弹出的时候,程序就运行终止了。

Java中基本函数

Math函数

Math.E 常数e  
     Math.pi 圆周率 
 (数据类型)Math.abs(a) 求绝对值
  Math.ceil(小数) 输出大于该数的最小整数
 Math.floor(小数) 输出小于指定数字的最大整数
Math(x,y) 返回 x平方加y平方,应用于求两点之间的距离 其中x=delt x  y=delt y
Math.max(a,b) 取两者中最大的
Math.min(a,b) 取两者中最小的
Math.pow(a,b)求成方
Math.sqrt(a) 求开方
Math.random() 求随机0到1之间的随机数数
Math.rint(小数) 四舍五入
Math.round()  四舍五入

2

String

1查询相关

	int  indexOf(int ch)通过字符找角标,从左到右所查找的元素的以一个的角标,如果查找的是字符串,那么输出的是所查找字符的第一个自负的角标
	char charAt(indext)通过角标找字符
	(这里的indext指的是一个字符串的角标)
	SubString(int beginlnxdex,int endlndex)截取一个字符串的一段返回一个子字符串,如果没有end则默认到结尾
	System.out.println(s.substring(0,3));

判断相关

	boolean countains()
	boolean endwith(字符或字符串)判断某个字符串是否是有所输入的字符串结尾的
	boolean startwith(字符或字符串)判断某字符串是否是有所输入的字符串开始的
	int boolean compareTo(another String) 比较两个字符串大小是否相等比较的是两个字符串在ascll代码中的大小是否相等,返回值有三种答案
	整数 前者在后者之后
	    0表示相等
	    负数表示前者在后者之前    
	boolean equals(anotherString)表示两个字符串内容是否相等
	boolean equalsIgnoreCase(String anotherString)
	对两个字符进行进行忽略大小写进行比较
	boolean isEmpty()判断是否为空串

修改相关

		String replace(char oldchar,char newchar)
		对字符串的修改永远都不是对其自身的修改,也就是是说字符串本身是不可变的,而对字符串的修改往往都是新建字符串,然后将修改后的内容进行赋值。
		String toUpperCase 小写转大写
		String ToLowerCase 大写转小写
		String trim() 返回删掉字符串线面和后面的空格

问题1
求s1在s2中出现的次数

class Q{
	public static void main(String[] args){
		String s1="abcabcabcabcabcbcabc";
		String s2="abc";
		int count=0;
		for(i=0;i<s1.length()-s2.length;i++){
			String sub=s1.subring(i,i+s2,length());
		if(sub.equals(s2){
		count++;
		}
		}
		System.out.println("s1在s2中出现了"+count+"次")}
}

判断一个字符串是否回文

class Q{
	public static void main(String[] args){
		
		String s="上海自来水来自海上"int left=0;
		int righs.length()-1;
		boolean flag=true;
		while(true){
			if(s.charAt(left)==s.charAt(right)){
			left++;
			right--;
			if(left>right){
				break;
			}
			}
		}
		System.out.println("s is huiwen"+true)
	}
}

问题3
模拟trim功能

class Q{
	public static void main(String[] args){
		int left=0;
		int right=s.length()-1;
		while(s.charAt(left)==' '){
			left++;
		}
		while(s.charAt(right)==' '){
			right++;
		}
		String res=s.substring(left,right+1);
		System.out.println("["+res+"]");
	}
}

问题4
求s1和s2中最大的相同字串(s1长于s2)
s1=“python is a program lauguage but is slow”
s2=“java is a program lauguage but is fast”

class Q{
	public static void main(String[] args){
		String s1="python is a program lauguage but is slow"
		String s2="java is a program lauguage but is fast"
		boolean flag=true;
		for(int len=s2.length();len>=1;len--){
			for(int i=0,j=len-1;j<s2.leng.th;i++,j++){
				String sub=s2.substring(i,j+1);if(s1.countains(sub)){
					flag=false;
					System.out.println("the result is "+sub);
					break;
				}

			}
		}

	}
}

取绝对值函数

class Q{
	public static void main(String[] args){
	int a=-1;
	int b=-6;
	int c=a+b;
	System.out.println(Math.abs(c));
	}
}

指数函数

class Q{
	public static void main(String[] args){	int a=2;
	int b=3;
	System.out.println(Math.pow(a,b));
	}
}

练习

在这里插入图片描述

import java.util.*;
public class ti41 {
public static int add(int n)
{
int sum = 0;//计入每一位相加的和
while (n!=0)
sum += n%10;
n/=10;
}
return sum;//返回数字
}
public static void main(String[] args) {
Scanner in = new Scanner(System. in);
int num = in. nextInt();
System. out .println(add(num));//调用函数
}

在这里插入图片描述

import java. util . Scanner;
public class ti42 {
static int num ;
public static void reverse(int num)
{
int k = 0,r,l = num;
while (num!=0)//将数字反过来
r = num%10;
k =k*10+r;
num/=10;
}
if(huiwen(k))//和原数字进行比较判断是否为回文数
{
System. out. println(1+"是回文数");
}
else
{
System. out . println(1+"不是回文数");
}
}
public static boolean huiwen (int a)
{
return num==a?true:false;
public static void main(String[] args) {
Scanner in = new Scanner (System. in);
num = in. nextInt();
reverse(num);//调用函数

在这里插入图片描述

import java. util . Scanner;
public class ti43 {
public static void go(int n )
for (int i = 1;i<=n;i++)
{
for (int j = 1;j<=n-i;j++)//输出图形
{
System.out.print(" ");
}
for (int k = i;k>0;k--)
{
System. out . print(k);
}
System. out . println();
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in. nextInt();
go(n);//传入函数
}

在这里插入图片描述

import java.util.*;
class Q404{
	public static void main(String[] args){
		Scanner scanner = new Scanner(system.in);
		System.out.println("enter the password");
		String password =scanner.nextline;

		if(isValid(password)){
			System.out.println("Valid");
		}
		else{
			System.out.println("unvalid")'
		}
		
	}
	public static boolean isValid(String s){
		return islengthValid(s)&&contentValid(s)&&idNumberValid(s);

	}
	public static Boolean lengethValid(String s){
	return s.length()<=8;
		
	}
	public static boolean isContentValid(String s){
		charc = ' ';
		for(int i=0;i<s.length.i++){
			c = s.charAt(i);
			if(!isLetter(c)&&!isDigit(c)){//!isletter 指的是非 isletter
				return false;
			}
		}
		return ture;
	}
	public static boolean isNumberValid(String s){
		int count = 0;
		char c = ' ';
		for(int i=0;i<s.lengrth;i++){
			c = s.charAt(i);
			if(isDigit(c)){
				count++;
			}
		}
	return count>=2;
	}
	public static boolean isLetter(String s){//是否是字母
	return c>='a'&&c<='z'||c>='A'&&c<='Z';
	}
	public static boolean isDigit(char c){//是否是数字
		return c>='0'&&c,='9';
	} 
}

在这里插入图片描述

import java. util . Scanner;
public class ti45 {
public static double sqrt(double n)
{
double last = 1;
double next = (last +n/last)/2;//套入公式
for ( ;Math. abs(next - last)>1e-6;)//两个差特别小时候结束循环
{
last = next;//这里 需要转换
next = (last +n/last)/2;
return next ;
}
public static void main(String[] args) {
Scanner in = new Scanner (System. in);
double n = in. nextDouble();
System. out .print(sqrt(n));//输出函数返回的值
}

在这里插入图片描述

public class ti46 {
public static boolean reverse(int num)//计算这 个数字的倒过来的数字
int k = 0,r,l = num;
while (num!=0)
r =num%10;
k = k*10+r;
num/=10;
return huiwen(k,1)?true:false;
public static boolean huiwen (int a,int 1)//判断是否为回文数
{
return l==a?true:false;
public static boolean su(int n)//判断是否为素数
boolean k = true;
for (int i = 2;i<=n/2;i++)
{
if (n%i==0)
k = false;
break;
}
}
return k == true?true:false;
}
public static void main(String [ ]args)
{
int count = 0;
for (int i =2;count<100;i++)
if (reverse(i )&&su(i))
{
count ++;//计数器
if (count%10==0)
{
System. out . printf("%- 7d\n" ,i);//- :个数字七个单位
}43
else
System. out. printf("%-7d",i);
}
}
}
}

在这里插入图片描述

public class ti47 {
public static boolean reverse(int num)//判断他的数字到过来
{
int k=0,r,1=num;
while (num!=0)
{
 	r = num%10;
	k = k*10+r;
	num/=10;
}
	return huiwen(k, l) ?true:false;
public static boolean huiwen (int a,int 1)// 判断是否为回文数
{
return l==a?true :false;
}
public static boolean su(int n)//判断是否为素数
{
	boolean k = true;
	for (int i = 2;i<=n/2;i++)
{
	if (n%i==0)
{
	k = false;
	break;
}
	return k == true?true:false;
}
public static int fan(int n)
{
	int k = 0,r;
	while (n!=0){
		r = n%10;
		k = k*10+r;
		n/=10;]
}
		return k;
public static void main(String []args)
{
	int count = 0;
	for (int i =2;count<100;i++)
{
	if (!reverse(i)&&su(i))
{
	if (su(fan(i)))
{
		count ++;}
		if (count %10==0)
System. out . printf("% - 7d\n" ,i)
}
else {
	System. out .printf("%- 7d",i);}
}
}

在这里插入图片描述

import java.util.*;
class Q408{
	public static void main(String[] args){
	Scanner scanner=new Scanner(System,in);
	String str=scanner.next;
	char s=scanner.next().char(0);	
	System.out.println(count(s,a));	

	}
	public static Int count(String a,char b){
	int count=0;
	if(a.charAt(i)==b){
		count++;
	}
	return count;
	}
} 

在这里插入图片描述

import java.util.*;
class Q409{
	public static void main(String[] args){
		Scanner scanner=new Scanner(System.in);
		System.out.println("enter nums");
		String str=scanner.next();
		for(int i=str.length();i>0;i--){
			System.out.println(str.charAt(i));
		}
	}
}

在这里插入图片描述

import java.util.*;
class Q410{
	public static void main(String[] args){
		Scanner scanner=new Scanner.(System.in);
		String str=scanner.next();
		for(int i=0;i<str.length();i++){
			if('A'<=str.charAt(i)&&str.charAt(i)<='Z';
			count++;
		}
	}
}

在这里插入图片描述

import java.util.*;
class Q411{
	public static void main(String[] args){
		Scanner scanner=new Scanner(System.in);
		String a=arr.length()>arr_length()?arr.length():arr_1.length();
		String b=arr.length()<arr_1.length()?arr.length():arr_1.length();//b is smaller  a is larger;
		String arr=scanner.next();
		String arr_1=scanner.next();
		for(int i=b.length;i>0;i--){
			if(a.SubString(0,i)==b.SubString(0,i)){
			System.out.println(a.SubString(0,i))
			break;
			}
		}
			
		}
	}
}

在这里插入图片描述

import java.util.*;
public static void main(String[] args){
	System.out.println("enter hexadecimal");
	Scanner scanner =new Scanner(System.in);
	String str =scanner,next();
	int sum=0;
	for(int i=0;i<str.length();i++){
		sum=sum+str.charAt(i)*(int)Math.pow(16,(i-1));
	}
	System.out.println(sum);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值