Java基础学习_07_方法

今日内容-方法

  1. 方法概念:在中定义的具有特定功能代码块
  2. 方法关键字:{}
  3. 方法格式:
修饰符  返回值类型  方法名(参数列表){
    方法体;
    return 返回值;
}
  1. 方法作用:提高代码的复用性 可以多次使用
  2. 方法别名:小程序、函数
  3. 方法命名规则:
  • 方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头写,不使用连接符。例如:addPerson。
  • 下划线可能出现在 JUnit 测试方法名称中用以分隔名称的逻辑组件。一个典型的模式是:test<MethodUnderTest>_<state>,例如 testPop_emptyStack。
/*
	程序(软件):计算机命令和数据的集合
			  通过计算机命令对数据进行处理
    		  通过计算机命令对数据按指定的算法进行转换
*/

在这里插入图片描述

/*
	把洗衣机写成一个方法
	洗衣机使用:全家人使用
	洗衣机原始数据:水类型 水名字、电类型 电名、衣服类型 脏衣服名
	洗衣过程:注水 搅拌 甩干
	洗衣结果数据:净衣服
*/
public static 衣服类型 小天鹅1(水类型 水名字、电类型 电名、衣服类型 脏衣服名){
   注水;
   搅拌;   
   甩干;
   return 净衣服;
}
/*
方法格式:
修饰符  返回值类型  方法名(参数列表){
   方法体;
   return 返回值;
}
方法格式详解:
修饰符:让被修饰者具有一些本来不具有的特征
返回值:方法运行完后得到的结果数据
方法名:给此代码块起的名字  和同类以区分、方便调用
参数列表:定义的多个变量用于接收方法需要的原始数据
方法体:两个大括号之间的代码块  把原始数据转换为结果数据的代码  功能实现的具体代码
return:把返回值返还给调用者   结束方法
  1. 方法使用
  • 注意1:方法必须先定义再使用
  • 注意2:方法必须定义在类中 主方法外
public class Function01 {
	public static void main(String[] args) {
		//方法
		/*	格式:
		 *  修饰符  返回值类型   方法名(参数列表){
		 *  	方法体;
		 *  	return 返回值;
		 *  }  
		 */
		Scanner sc = new Scanner(System.in);
		System.out.println("输入第一个数");
		int num1 = sc.nextInt();
		System.out.println("输入第二个数");
		int num2 = sc.nextInt();
		System.out.println("输出两个数的最大值");
		//调用方法:在主方法中调用方法
		int max1  = max(num1,num2); //调用方法并接受返回值
		System.out.println(max1);
		System.out.println("输出两个数的和");
		int sum1 = add(num1,num2);
		System.out.println(sum1);
		
	}
	//求两个数的最大值
	public static int max(int num1,int num2){
		int result;
		if(num1 > num2)
			result = num1;
		else
			result = num2;
		return result;
	}
	//求两个数的和
	//定义方法明确1:方法参数列表:方法运行需要的原始数据:两个int
	//定义方法明确2:方法返回值:方法运行后的结果数据:int类型的和
	//public static:可以被主方法调用
	//int:返回值和类型
	//addInt:方法名--标识符---遵守命名规范(可读性、除了第一个单词其余单词首字母大写)
	//int a,int b:参数列表:有感于接收元素数据而定义的多个变量
	public static int add(int num1,int num2){
		//方法体:实现方法具体功能的代码块
		int sum = 0;
		sum = num1 + num2;
		return sum;
	}
}
public class Function02 {
	public static void main(String[] args) {
//		修饰符  返回值类型  方法名(参数列表){
//		    方法体;
//		    return 返回值;
//		}
		//求一个int和一个double的和
		//参数列表:int,double
		//明确返回值:和:double类型
		double sum = addIntDouble(2, 4);
		System.out.println(sum);
		//打印一个int和一个double的和
		printIntDouble(2,4);
		
		//求1到100的和
		int sum1 = getSum();
		System.out.println(sum1);
		//打印5个星
		printXing();
		
	}
	// 求一个int和一个double的和
	// 参数列表:int,double
	// 明确返回值:和:double类型
	// 打印一个int和一个double的和
	public static double addIntDouble(int a,double d){
		//定义一个sum,用于接收参数a,d两个数据的和
		double sum = a+d;
		return sum;
	}
	//打印一个int和一个double的和
	//明确参数列表:int,double
	//明确返回值:无,额米有返回值就用关键字void表示
	public static void printIntDouble(int a,double d){
		double sum=a+d;
		System.out.println(a+"+"+d+"="+sum);
		return;//无返回值时可以省略
	}
	//求1到100的和
	//明确参数列表:无
	//明确返回值:和(int类型)
	public static int getSum(){
		int sum=0;
		for (int i = 0; i <= 100; i++) {
			sum +=i;
		}
		return sum;
	}
	//打印5个星
	//明确参数列表:无
	//明确返回值:无 用void来标示
	public static void printXing(){
		for (int i = 0; i <= 5; i++) {
			System.out.print("*");
		}
		System.out.println();
		return;//可以省略
	}
	
}

二.基本数据类型和数据类型做参数的区别

public class Function03 {
	public static void main(String[] args) {
		int b=1;
		int a=b;
		b++;
		System.out.println(a);
		int[] arr1 = {1,2,3};
		int[] arr2 = {1,2,3};
		//new每次都创建一个新的对象
		System.out.println(arr1);//打印对象名 打印的是对象类型@16进制内存对象
		System.out.println(arr1);//打印对象名 打印的是对象类型@16进制内存对象
		//通过内存地址 判断是否是同一个对象
		//也可以通过== 判断是否是同一个对象
		System.out.println(arr1 == arr2);//false
		
		int[] arr3 = arr1;//让arr3指向arr1指向的数组对象:
		arr1[1]=0;
		System.out.println(arr3[1]);//可以通过arr1和arr3操作同一个对象
		
		int aa = 11;
		show(aa); //完全等价于:int a = aa;a++
		//把main方法中的变量aa的值复制一份 给了show方法中的变量a
		System.out.println(aa);//11
		
		
		
		int[] array ={1,2,3,4};
		show2(array);  //完全等价于:int[] arr = array;arr[0]++;
		//show2方法中的对象名arr和main方法中对象名arr指向同一个对象
		//在main方法中通过array来操作此对象
		//在show2方法中通过arr来操作此对象
		System.out.println(array[0]);
		sort(array);
		for (int i = 0; i < array.length; i++) {
			System.out.print(array[i]+(i==array.length-1?"\n":","));
		}
	}
	
	private static void sort(int[] arr) {
		for (int i = 0; i < arr.length-1; i++) {
			for (int j = 1; j < arr.length; j++) {
				if(arr[i]>arr[j]){
					int temp = arr[i];
					arr[j] = arr[i];
					arr[i] = temp;
				}
			}
		}
		
	}

	//引用数据类型作为方法参数    传递的是对象的内存地址:两个对象名指向同一个对象
	private static void show2(int[] arr) {
		arr[0]++;
	}

	//基本数据类型作为方法参数    传递的是常量值
	private static void show(int a) {
		a++;	
	}

}

基本数据类型作为参数只是把值复制一份给了形参 更改形参的值,如果不返回,则不会影响实参的值

而数据类型作为参数,方法中的对象名和main方法中的对象名指向同一个对象

练习

  1. 求n的阶乘
import java.util.Scanner;
public class Test01 {
	public static void main(String[] args) {
		System.out.println("输入一个数:");
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int sum = multsum(n);
		System.out.println(n+"的阶乘是:"+sum);

	}
	//1.求n的阶乘
	//参数列表:int n
	//返回值:阶乘 int
	//返回值类型int 方法名multsum  参数 int n
	public static int multsum(int n){
		//定义一个结果变量
		int result = 1;
		//for循环  从1到n逐步相乘
		for (int i = 1; i <=n; i++) {
			result = result*i;
		}
		return result;
	}

}

2.求一个int数组的最大值

import java.util.Scanner;
public class Test02 {
	public static void main(String[] args) {
		//定义一个数组
		int[] arr = {1,2,3,4,5,6};
		int max = maxArr(arr);
		System.out.println("arr数组的最大值是"+max);
	}
	//2.求一个int数组的最大值
	//返回值类型int[] 方法名maxArr  参数 int n
	public static int maxArr(int[] arr){
		int max = arr[0];
		for (int i = 1; i < arr.length; i++) {
			max = max>arr[i]?max:arr[i];
		}
		return max;
	}
	

}

3.对int数组进行排序

import java.util.Scanner;
public class Test03 {
	public static void main(String[] args) {	
		//定义一个数组
		int[] arr = {1,3,3,4,56,34};
		maxArr(arr);
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]+(i==arr.length-1?"\n":","));
		}
	}
	//3.对int数组进行排序
	//返回值类型int[] 方法名maxArr  参数 int n
	public static void maxArr(int[] arr){
		for (int i = 0; i < arr.length; i++) {
			for (int j = i+1; j < arr.length; j++) {
				if(arr[i]<arr[j]){//依次进行比较   如果数组中前一个比后一个大,进行调换
					int temp = arr[i];
					arr[i]=arr[j];  //用临时值来存放,进行转换
					arr[j]=temp;
				}
			}
		}		
	}
}

4.百钱买百鸡 公鸡:3 母鸡 2 小鸡 1/3 打印几种买法

​ 返回值类型int 方法名BaiQian 参数 int n

import java.util.Scanner;
public class Test04 {
	public static void main(String[] args) {	
		//调用方法
		BaiQian();
	}
	//4.百钱买百鸡  公鸡:3  母鸡  2   小鸡 1/3  打印几种买法
	//返回值类型int 方法名BaiQian  参数 int n
	public static void BaiQian(){
		int x;//公鸡数
		int y;//母鸡数
		//100-x-y; //小鸡数
		int count = 0;  //符合条件的次数
		for ( x = 0; x < 34; x++) {
			for ( y = 0; y <=50; y++) {//判断钱数是否满足和小鸡的数量
				if(3*x + 2*y+(100-x-y)/3 == 100 && (100-x-y)%3 == 0){
					count = count+1;
				}
			}
		}
		System.out.println("符合条件的情况有"+count+"种");
	}
}

5.对一个double数据 四舍五入变量指定位数的小数

public static double siSheWuRu(double a,int n)

返回值类型int 方法名BaiQian 参数 int n

public class Test05 {
	public static void main(String[] args) {
		double d = siSheWuRu(3.265342344, 4);
		System.out.println(d);
		//int arr1[] = { 1, 5, 2, 6, 8, 5, 4, 6, 8, 5, 4, };       
		//int []arr1 = { 1, 5, 2, 6, 8, 5, 4, 6, 8, 5, 4, };	
	}
	//5.对一个double数据 四舍五入变量指定位数的小数
	//public static double siSheWuRu(double a,int n)
	//返回值类型int 方法名BaiQian  参数 int n
	public static double siSheWuRu(double a,int n){
		double d1;//定义一个double类型的变量,用来接收四舍五入后的数
		double d2 = a * Math.pow(10, n);
		int d=(int)d2;//把d2强制转换为int
		if(d2 % d >=0.5){
			d++;
		}else{
			d =d;
		}
		d1 = d / Math.pow(10, n);
		return d1;		
	}
}

6.祖冲之计算圆周率:3.1415926-3.14159267

计算PI=4/1-4/3+4/5+4/7+4/9+…

问一共经历了几次加或减法运算

public class Test06 {

	public static void main(String[] args) {
	
			qiuCiShu();
	}
	/*
	 * 6.祖冲之计算圆周率:3.1415926-3.14159267
	 * 计算PI=4/1-4/3+4/5+4/7+4/9+......
	 *		问一共经历了几次加或减法运算
	 */

	private static void qiuCiShu() {
		//方法一:
        double PI = 0;
		int count = 0;
		int i = 1;
		int k=1;
		for(;PI<3.1415926 || PI>3.1415927;){
			PI += 4.0/i*k;
			i=(i+2);
			k*=-1;
			count++;
		}
		System.out.println("count="+count+",次数"+(count-1));
		/*
		 * 获取每次加入pi的数的规律
		 * 1.正负交替
		 * 2.分子固定为4
		 * 3.分母从1开始  每次加2
		 * 结束循环的条件是:pi进入3.1415926-2.14159267
		 * 继续循环的条件是:pi>3.1415926 || pi<3.14159267
		 * 
		 */
        //方法二:
		double pi=0;
		int ciShu;
		for(ciShu = 1;pi<3.1415926 || pi>3.1415927;ciShu++){
			//求每次加入pi中的那个数
			//ciShu=1  分母=1
			//ciShu=2  分母=3
			//ciShu=3  分母=5
			//ciShu=4  分母=7
			double num = 4.0/(2*ciShu-1);
			if(ciShu%2==0){
				pi -= num;
			}else{
				pi += num;
			}
		}
		System.out.println("pi="+pi+",次数"+(ciShu-1));
	}
  }
}

7.获取一个int数组中所有但不重复的元素构成一个数组

/*
	1.创建一个空的数组arrNew  长度为arr.length   定义一个变量记录装入新数组的元素的个数count
	2.遍历arr  获取当前元素arr[i]  判断0到i-1是否出现或arr[i] 如果没有出现过,就把arr[i]加入到arrNew中
	3.再创建一个新的数组arr2:长度是count  把arrnew中的前count个元素加入arr2中
*/
public class Test07 {
	public static void main(String[] args) {
        //定义一个数组
        int[] arr = {1,3,4,23,23,245,2151}
        int[] newArr = changeArr(arr);
        print(newArr);//打印
    }
    
    //写一个打印函数
    public staic void print(int[] arr){
        for(int i = 0; i < arr.length; i++){
            System.out.print(arr[i]+(i==arr.length-1?"\t":","));
        }
    }
    //编写一个函数 changeArr
    public static int[] changeArr(int[] arr){
        int[] newArr = new int[arr.length]; 
        int count = 0;
        //遍历数组
        for(int i = 0;i < newArr.length;i++){
            if(i == 0){
                newArr[count] = arr[i];
                count++;
            }else{
                boolean b =false;
                for(int j = 0;j<i;j++){
                    if(arr[i] == arr[j])//判断arr数组中是否有相同的元素
                        b = true;//如果有,设置为true
                }
            }
            if(b == false){ //如果标签值没有更改证明没有重复的值
                newArr[count] = arr[i];  //把数组元素值添加进去
                count++}
        }
    }
    //创建一个新的数组  长度是count
    int[] array = new int[count];
    //把newArr中的前count个元素加入array中
    for(int i = 0; i<array.length;i++){
        array[i] = newArr[i];
    }
    return array;
  }
}



  if(arr[i] == arr[j])//判断arr数组中是否有相同的元素
        b = true;//如果有,设置为true
                }
            }
            if(b == false){ //如果标签值没有更改证明没有重复的值
                newArr[count] = arr[i];  //把数组元素值添加进去
                count++}
        }
    }
    //创建一个新的数组  长度是count
    int[] array = new int[count];
    //把newArr中的前count个元素加入array中
    for(int i = 0; i<array.length;i++){
        array[i] = newArr[i];
    }
    return array;
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值