JAVA数组与方法学习(黑马课程以及二哥的java进阶之路)
文章目录
- JAVA数组与方法学习(黑马课程以及二哥的java进阶之路)
- 前言
- 一、数组
- 1.为什么要用数组
- 2.静态化定义数组
- 3.动态化定义数组
- 4.数组的访问与遍历
- 5.数组的案例
- 6.数组的执行原理
- 二、JAVA方法
- 1.方法的定义与使用
- 2.方法使用需要注意的问题
- 3.方法案例
- 4.方法在计算机中的执行原理
- 三、JAVA的参数传递机制
- 1.基本类型的参数传递
- 2.引用类型的参数传递
- 四、方法重载
- 四、Return关键字的使用
前言
掌握数组和方法的概念和应用
一、数组
1.为什么要用数组
2.静态化定义数组
3.动态化定义数组
4.数组的访问与遍历
(1)
(2)所谓遍历数组,就是借助循环结构,以数组长度为界,遍历数组索引。
5.数组的案例
(1)要求录入6个评委的打分,录入完毕后直接输出选手的平均分
package com.Array;
import java.util.Scanner;
public class arrayTest1 {
public static void main(String[] args) {
//要求录入6个评委的打分,录入完毕后直接输出选手的平均分
double[] scores=new double[6];
Scanner sc=new Scanner(System.in);
for (int i=0;i<scores.length;i++){
System.out.println("请您输入第"+(i+1)+"个评委的分数");
double score=sc.nextDouble();
scores[i]=score;
}
double sum=0;
for(int i=0;i<scores.length;i++){
sum+=scores[i];
}
System.out.println("选手最终得分为"+sum/scores.length);
}
}
(2)随机排名
package com.Array;
import java.util.Random;
import java.util.Scanner;
public class arrayTest2 {
public static void main(String[] args) {
//完成随机排名
//为什么不用静态的方式定义数组,
// 因为我们最后需要的是顺序被打乱后的数组,静态方式导致后续需要重新定义一个数组
int[] codes=new int[5];
Scanner sc=new Scanner(System.in);
for(int i=0;i<codes.length;i++){
System.out.println("请输入第"+(i+1)+"位员工的工号");
int code =sc.nextInt();
codes[i]=code;
}
Random r=new Random();
for(int i=0;i<codes.length;i++){
//每遍历到一个数组,都随机一个数组索引范围内的值,
// 然后让当前遍历的数据与该索引位置处的值交换
int index=r.nextInt(5);
//借助中间变量
int temp=codes[index];
codes[index]=codes[i];
codes[i]=temp;
}
for (int i=0;i<codes.length;i++) {
System.out.println(codes[i]+" ");
}
}
}
6.数组的执行原理
首先介绍java内存分配
以数组为例,栈主要存放数组的引用地址,堆内存中存放具体的数值。
假如说存在赋值的情况,比如int[] arr2=arr1; 此时说明数组2的值为数组1所代表的地址,即他们两个数组都指向堆中的同一组数据,也就是说,只要堆中这组数据有所变动,那么两个数组的结果值同时改变。这也就是多个变量指向一个数组的情况。
20240304
二、JAVA方法
1.方法的定义与使用
使用代码的好处是提高了代码的复用性,让整个代码更有逻辑。
同时为了更加贴合业务逻辑的需求,需要设计合理的方法形式。
2.方法使用需要注意的问题
3.方法案例
(1)判断输入的数是奇数还是偶数
package com.method;
import java.util.Scanner;
public class methodDemo1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入你要判断的数字");
int number=sc.nextInt();
judge( number);
}
public static void judge(int number){
if(number%2==0){
System.out.println("是偶数");
}
else{
System.out.println("是奇数");
}
}
}
(2)打印int类型的数组内容
package com.method;
public class methodDemo2 {
public static void main(String[] args) {
int[] arr={10,30,50,70};
printArray(arr);
}
public static void printArray(int[] arr){
System.out.println("[");
for(int i=0;i<arr.length;i++){
System.out.println(i==arr.length-1?arr[i]:arr[i]+",");
}
System.out.println("]");
}
}
(3)比较两个数组是否一样
package com.method;
public class methodDemo3 {
public static void main(String[] args) {
int[]arr1=null;
int []arr2=null;
System.out.println(equals(arr1,arr2));
}
public static boolean equals(int[] arr1, int[] arr2) {
if (arr1 == null && arr2 == null) {
return true;
}
if (arr1 == null || arr2 == null) {
return false;
}
if (arr1.length != arr2.length) {
return false;
}
for (int i = 0; i < arr1.length; i++) {
if (arr1[i] != arr2[i]) {
return false;
}
}
return true;
}
}
4.方法在计算机中的执行原理
三、JAVA的参数传递机制
1.基本类型的参数传递
以这段代码中a的值为例
比较重要的一点是,在change方法中的a的初始值,只是将main方法中的a值copy了一下,而不是更改。再从栈的角度可以看出,change方法执行完成之后出栈,留下的main方法里边只有a=10
2.引用类型的参数传递
需要注意的是,在引用类型的值传递时,我们copy的是地址,而数组中的值存在于堆中,方法存在栈中,堆中的值变了,因此最后数组的值也发生了改变。
四、方法重载
关于顺序不同的理解比如说某个方法 sum(int a,double b);与 sum(int b,double a);是不被认可的,只跟数据类型的顺序有关,应该是 sum(double a,int b) ;跟变量名称无关。
四、Return关键字的使用
20230305