package com.angus.method.theMemoryOfMethod_4;
public class note {
public static void main(String[] args) {
//方法的内存 ->讲到内存就要联系内存图来理解
//将学习以下3种内存
//1.方法调用的基本内存原理
//就是进栈出栈
//先进后出
//和数据结构那个一样
//2.方法传递基本数据类型的内存原理
//在基本数据类型当中,
//变量中存储的是真实的数据
//只要是new出来的,都是引用数据类型
//引用数据类型当中
//变量中存储的是地址值
//引用:使用了其他空间中的数据
//从内存的角度去解释
//基本数据类型:数据值时存储在自己的空间中->栈中
//特点:赋值给其他变量,也是赋的真实值
//后改前不改,单独用
//引用数据类型:数据值存储在其他空间中,自己空间存储的是地址值
//特点:赋值给其他变量,赋的是地址值
//后改前也改,共用
//3.方法传递引用数据类型的内存原理
//方法传递基本数据类型的内存原理
//传递基本数据类型时,传递的是真实的数据,形参的改变,不影响实际参数的值
//传递引用数据类型的时候,传递的是地址值,形参的改变,会影响到实际参数的值
System.out.println("^^");
}
}
知识点:
方法
定义一个方法,该方法能够找出两个小数中的较小值并返回。在主方法中调用方法进行测试。
根据方法的功能描述,方法的参数应该是两个小数。
要返回两个小数的较小值,所以返回值类型也是小数类型。
定义方法getMin(),方法的参数是double a ,double b。
在方法中对两个数字进行判断,返回较小值。
在主方法中调用getMin()方法并接受返回值。
在主方法中打印结果。
package test; public class test1 { public static void main(String[] args) { //定义一个方法, //该方法能够找出两个小数中的较小值并返回。 //在主方法中调用方法进行测试。 double min =getMin(1.1,2.2); System.out.println(min); System.out.println("^^"); } public static double getMin(double num1,double num2) { if (num1 < num2) { return num1; } else { return num2; } } }
定义一个方法,该方法能够找出三个整数中的最大值并返回。在主方法中调用方法测试执行。
根据题意,方法中需要使用三个整数,所以方法参数应该是三个整数类型。
方法需要有返回值,返回值的类型也是整数类型。
定义方法getMax(),方法的参数是三个int类型变量a,b,c,方法的返回值是int类型。
在方法中使用多分支if...else...或者三元运算符判断出最大值并返回。
在主方法中调用getMax()方法并接受返回值。
在主方法中打印结果。
package test; public class test2 { public static void main(String[] args) { //定义一个方法, //该方法能够找出三个整数中的最大值并返回。 //在主方法中调用方法测试执行。 int max = getMax(1,2,3); System.out.println(max); System.out.println("^^"); } //定义一个方法,该方法能够找出三个整数中的最大值并返回。在主方法中调用方法测试执行。 public static int getMax(int num1,int num2,int num3) { int max = num1; if (num2 > max) { max = num2; } if (num3 > max){ max = num3; return max; } else { return max; } } }
在主方法中通过键盘录入三个整数。定义一个方法,方法接收三个整数变量,在方法中从大到小依次打印三个变量。执行效果如下:
请输入第一个整数:10 请输入第二个整数:30 请输入第三个整数:20 从大到小的顺序是: 30 20 10
方法需要接受三个整数,那么方法的形式参数如何定义?
方法没有返回值的需求,返回值类型是什么?
使用键盘录入分别录入三个整数。
定义method方法,方法的参数是三个int类型,方法的返回值类型是void。
2.1. 定义整数变量max用于存储最大值,定义min变量用于存储最小值。
2.2. 使用if..else..多分支判断语句或者三元运算符计算三个整数中的最大值并赋值给max。
2.3. 使用if..else..多分支判断语句或者三元运算符计算三个整数中的最小值并赋值给min。
2.4. 定义变量mid代表中间数,三个整数的和减去max,再减去min,就是中间数的值。
2.5. 依次打印最大值,中间值和最小值。
在主方法中调用method方法,传入参数。
package test; import java.util.Scanner; public class test3 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入第一个整数:"); int num1 = scanner.nextInt(); System.out.println("请输入第二个整数:"); int num2 = scanner.nextInt(); System.out.println("请输入第三个整数:"); int num3 = scanner.nextInt(); getPrint(num1,num2,num3); System.out.println("^^"); } //在主方法中通过键盘录入三个整数。定义一个方法,方法接收三个整数变量,在方法中从大到小依次打印三个变量。执行效果如下: // //``` //请输入第一个整数:10 //请输入第二个整数:30 //请输入第三个整数:20 //从大到小的顺序是: 30 20 10 //``` public static void getPrint(int num1,int num2,int num3) { int max = 0; int min = 0; int mid = 0; if (num1 > num2) { max = num1; min = num2; } else { max = num2; min = num1; } if (num3 > max){ max = num3; } System.out.println(max); if (num3 < min){ min = num3; mid = (num1 + num2 + num3) - max - min; System.out.println(mid); System.out.println(min); } else { mid = (num1 + num2 + num3) - max - min; System.out.println(mid); System.out.println(min); } } }
数字是有绝对值的,负数的绝对值是它本身取反,非负数的绝对值是它本身。请定义一个方法,方法能够得到小数类型数字的绝对值并返回。请定义方法并测试。
方法的功能是得到一个小数的绝对值,参数应该是一个小数类型。
绝对值需要被返回,返回值类型应该也是小数类型。
定义一个小数变量num。
定义获取绝对值的方法,方法的参数是一个double类型,返回值类型是double。
在方法内部使用if..else..判断。
3.1. 如果是负数则对负数取反并返回。
3.2. 如果不是负数则直接返回数字本身。
在主方法中调用绝对值方法,传入参数num,并接受返回值。
打印返回的结果。
package test; public class test4 { public static void main(String[] args) { double jue = getJue(-1.1); System.out.println(jue); System.out.println("^^"); } //数字是有绝对值的,负数的绝对值是它本身取反,非负数的绝对值是它本身。 //请定义一个方法,方法能够得到小数类型数字的绝对值并返回。请定义方法并测试。 public static double getJue(double num) { if (num >= 0) { return num; } else { num = 0 - num; return num; } } }
键盘录入一个正整数
定义一个方法,该方法的功能是计算该数字是几位数字,并将位数返回
在main方法中打印该数字是几位数
演示格式如下: (1)演示一: 请输入一个整数:1234 控制台输出:1234是4位数字 (2)演示二: 请输入一个整数:34567 控制台输出:34567是5位数字
方法的功能是求有多少位,所以参数是一个,就是要计算的数据。
题目说要返回,所以方法必须有返回值。
键盘录入一个正整数
定义获取位数的方法,方法的参数是一个int类型,返回值类型是int。
在方法内部使用循环获取有多少位
可以不断的除以10,当结果为0时,循环结束。 除以10的次数,就是数字的位数。
举例:
123 除以第一次10之后为:12
除以第二次10之后为:1
除以第三次10之后为:0
表示123是三位数
在主方法中调用方法,传入参数,并接受返回值。
打印返回的结果。
package test; import java.util.Scanner; public class test5 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("键盘录入一个正整数"); int num = scanner.nextInt(); int count = getCount(num); System.out.println(num + "是" + count + "位数字"); System.out.println("^^"); } //键盘录入一个正整数 // //定义一个方法,该方法的功能是计算该数字是几位数字,并将位数返回 // //在main方法中打印该数字是几位数 // //演示格式如下: //(1)演示一: // 请输入一个整数:1234 // 控制台输出:1234是4位数字 //(2)演示二: // 请输入一个整数:34567 // 控制台输出:34567是5位数字 public static int getCount(int num) { int count = 0; while (num > 0){ //123 num = num / 10; count++; } return count; } }
需求:
定义一个方法equals(int[] arr1,int[] arr2).
功能:
比较两个数组是否相等(长度和内容均相等则认为两个数组是相同的)
package test; public class test6 { public static void main(String[] args) { int arr1[] = {1,2,3}; int arr2[] = {1,2,3}; boolean get = equals(arr1,arr2); System.out.println(get); System.out.println("^^"); } //需求: // // 定义一个方法equals(int[] arr1,int[] arr2). // //功能: // // 比较两个数组是否相等(长度和内容均相等则认为两个数组是相同的) public static boolean equals(int[] arr1,int[] arr2) { for (int i = 0; i < arr1.length; i++) { if (arr1[i] != arr2[i]) { return false; } } return true; } }
需求:
定义一个方法fill(int[] arr,int value)
功能:
将数组arr中的所有元素的值改为value
package test; public class test7 { public static void main(String[] args) { int arr[] = {1,2,3}; int crr[]=fill(arr,5); for (int i = 0; i < crr.length; i++) { System.out.println(crr[i]); } System.out.println("^^"); } //需求: // // 定义一个方法fill(int[] arr,int value) // //功能: // // 将数组arr中的所有元素的值改为value -> 服了,我还以为是改为value这个单词全放进去,value表示的意思是值,意思是把原数组的值全改为新给定的值,下次注意,而且还定义了int,更不应该理解错 public static int[] fill(int[] arr,int value) { int brr [] = new int[arr.length]; for (int i = 0; i < arr.length; i++) { if (arr[i] != brr[i]) { brr[i] = value; } } return brr; } }
需求:
定义一个方法fill(int[] arr,int fromIndex,int toIndex,int value)
功能:
将数组arr中的元素从索引fromIndex开始到toIndex(不包含toIndex)对应的值改为value
package test; public class test8 { public static void main(String[] args) { int arr[] = {1,2,3,4,5,6,7,8,9}; //3,4,5,6 7-3=4 4,5,6,7 toIndex-fromIndex arr[fromIndex]~arr[toIndex] brr[index] index = 0 index++ int crr[] = fill(arr,3,7,5); for (int i = 0; i < crr.length; i++) { System.out.println(crr[i]); } System.out.println("^^"); } //需求: // // 定义一个方法fill(int[] arr,int fromIndex,int toIndex,int value) // //功能: // // 将数组arr中的元素从索引fromIndex开始到toIndex(不包含toIndex)对应的值改为value public static int[] fill(int[] arr,int fromIndex,int toIndex,int value) { int brr[] = new int[toIndex-fromIndex]; int index = 0; for (int i = fromIndex; i < toIndex; i++) { if (brr[index] != arr[i]) { brr[index] = value; index++; } } return brr; } }
需求:
定义一个方法copyOf(int[] arr, int newLength)
功能:
将数组arr中的newLength个元素拷贝到新数组中,并将新数组返回,从索引为0开始
package test; public class test9 { public static void main(String[] args) { int arr[] = {1,2,3,4,5,6}; int crr[] =copyOf(arr,5); for (int i = 0; i < crr.length; i++) { System.out.println(crr[i]); } System.out.println("^^"); } //需求: // // 定义一个方法copyOf(int[] arr, int newLength) // //功能: // // 将数组arr中的newLength个元素拷贝到新数组中,并将新数组返回,从索引为0开始 public static int[] copyOf(int[] arr, int newLength) { int brr[] = new int[newLength]; for (int i = 0; i < newLength; i++) { brr[i] = arr[i]; } return brr; } }
需求:
定义一个方法copyOfRange(int[] arr,int from, int to)
功能:
将数组arr中从索引from(包含from)开始,到索引to结束(不包含to)的元素复制到新数组中,
并将新数组返回。
package test; public class test10 { public static void main(String[] args) { int [] arr = {1,2,3,4,5,6,7,8,9}; int crr[] = copyOfRange(arr,3,7); for (int i = 0; i < crr.length; i++) { System.out.println(crr[i]); } System.out.println("^^"); } //需求: // // 定义一个方法copyOfRange(int[] arr,int from, int to) // //功能: // // 将数组arr中从索引from(包含from)开始,到索引to结束(不包含to)的元素复制到新数组中, // // 并将新数组返回。 public static int[] copyOfRange(int[] arr,int from, int to) { int brr[] = new int[to - from]; int index = 0; for (int i = from; i < to; i++) { brr[index] = arr[i]; index++; } return brr; } }
一个大V直播抽奖,奖品是现金红包,分别有{2,588,888,1000,10000}五个奖金。请使用代码模拟抽奖,打印出每个奖项,奖项的出现顺序要随机且不重复。打印效果如下:(随机顺序,不一定是下面的顺序)
888元的奖金被抽出 588元的奖金被抽出 10000元的奖金被抽出 1000元的奖金被抽出 2元的奖金被抽出
奖项要随机出现,但奖金不是连续的数字,不能被随机产生。能随机产生的只有数组的索引了,可以使用随机索引来代表随机元素。因为索引和元素是一一对应的,
哪些奖被抽过了,哪些奖没有被抽过,要定义一个数组来存放已经被抽过的奖项。
每个奖项只能被抽出一次,要写一个方法来控制奖项不重复。
使用数组存放多个奖金,再使用另一个数组存放已经被抽过的奖金,使用方法来判断某个奖金是否已经被抽取过。
定义奖金的数组arr。
定义数组brr准备存放已经被抽过的奖金,两个数组长度相同。
定义一个变量index,用户代表数组brr的索引。
定义方法,判断数组中是否存在某数字,存在返回true,不存在返回false。
写一个while循环,如果index
在循环中使用随机数产生一个随机索引i。
使用步骤4的方法判断brr数组中是否包含arr[i]奖金。
如果不包含,则打印arr[i]奖金,并且把它放入brr数组中代表已经被抽取过,同时index加一。
package test; import java.util.Random; public class test11 { public static void main(String[] args) { int arr[] = {2,588,888,1000,10000}; int brr[] = new int[5]; int index = 0; while (index < arr.length){ Random random = new Random(); int i = random.nextInt(arr.length); boolean flag = get(brr,arr[i]); if (flag == false) { System.out.println(arr[i]); brr[index] = arr[i]; index++; } } System.out.println("^^"); } //一个大V直播抽奖, //奖品是现金红包, //分别有{2,588,888,1000,10000}五个奖金。 //请使用代码模拟抽奖,打印出每个奖项, //奖项的出现顺序要随机且不重复。 //打印效果如下:(随机顺序,不一定是下面的顺序) //888元的奖金被抽出 //588元的奖金被抽出 //10000元的奖金被抽出 //1000元的奖金被抽出 //2元的奖金被抽出 public static boolean get(int[]brr,int num) { for (int i = 0; i < brr.length; i++) { if (brr[i] == num) { return true; } } return false; } }