黑马程序员Java教程学习笔记
Posted 末初mochu7
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了黑马程序员Java教程学习笔记相关的知识,希望对你有一定的参考价值。
学习视频:https://www.bilibili.com/video/BV1Cv411372m
如侵权,请私信联系本人删除
文章目录
黑马程序员Java学习笔记(二)
数组概述
- 数组就是用来存储一批同种类型数据的内存区域(可以理解为容器)
int[] arr = 10, 20, 30, 40, 50, 60;
String[] names = "张三", "李四", "王五";
数组定义方式一、访问、注意事项
- 静态初始化数组:定义数组的时候直接给数组赋值
//完整格式
数据类型[] 数组名 = new 数据类型[]元素1, 元素2, 元素3...;
double[] scores = new double[]89.9, 99.5, 59.5, 88.0;
int[] ages = new int[]12, 24, 36;
//简化格式
数据类型[] 数组名 = 元素1, 元素2, 元素3...;
int[] ages = 12, 24, 36;
public class ArrayDemo1
public static void main(String[] args)
// double[] scores = new double[]88.9, 65.8, 94.3;
double[] scores = 88.9, 65.8, 94.3;
// int[] ages = new int[]19, 22, 21;
int[] ages = 19, 22, 21;
// String[] names = new String[]"张三", "李四", "王五";
String[] names = "张三", "李四", "王五";
System.out.println(scores);
System.out.println(ages);
System.out.println(names);
/*
运行结果:
[D@43a25848
[I@3ac3fd8b
[Ljava.lang.String;@5594a1b5
*/
[
表示是数组格式D
、I
、Ljava.lang.String;
表示的是数据类型- 十六进制字符串则是标识数据在内存中的地址
特别注意:数组变量名中存储的是数组在内存中的地址,数组是引用类型
数组的访问
int[] ages = 19, 22, 21;
// 访问
System.out.println(ages[0]);
// 赋值
ages[0] = 36;
System.out.println(ages[0]);
// 获取数组长度
System.out.println(ages.length);
// 访问数组最大索引
System.out.println(ages[ages.length - 1]);
数组的几个注意事项
数据类型[] 数组名
也可以写成数据类型 数组名[]
- 什么类型的数组必须存放什么类型的数据,否则报错
- 数组一旦定义出来,程序执行的过程中,长度、类型就固定了
数组定义方式二,元素默认值规则
数组的动态初始化
- 定义数组的时候只确定元素的类型和数组的长度,之后再存入具体数据
// 先定义
数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[3];
// 后赋值
arr[0] = 10;
System.out.println(arr[0]);
动态数据中元素没有赋值,会有一个默认值,int
类型为0
,double
类型为0.0
,String
类型为null
public class ArrayDemo1
public static void main(String[] args)
double[] scores = new double[3];
System.out.println(scores[0]);
scores[0] = 99.9;
System.out.println(scores[0]);
String[] names = new String[3];
names[0] = "mochu7";
names[2] = "末初";
System.out.println(names[0]);
System.out.println(names[1]);
System.out.println(names[2]);
/*
运行结果:
0.0
99.9
mochu7
null
末初
*/
注意:静态初始化数组和动态初始化数组不可以混用,如下这样是会报错的
int[] arrs = new int[3]1, 2, 3
数组遍历、元素求和
public class ExampleCode
public static void main(String[] args)
double sum = 0;
double[] scores = 67.2, 52.5, 89.9, 92.3, 74.6;
for(int i=0; i<scores.length; i++)
System.out.println(scores[i]);
sum += scores[i];
System.out.println("总成绩为:" + sum);
/*
运行结果为:
67.2
52.5
89.9
92.3
74.6
总成绩为:376.5
*/
数组案例:求最值、猜数字、随即排名、冒泡排序
求最大值
public class ExampleCode
public static void main(String[] args)
int[] faceScore = 15, 9000, 10000, 20000, 9500, -5;
int max = faceScore[0];
for(int i=0; i<faceScore.length; i++)
if(max < faceScore[i])
max = faceScore[i];
System.out.println("最大值:" + max);
/*
运行结果:
最大值:20000
*/
猜数字游戏
package com.example.code;
import java.util.Random;
import java.util.Scanner;
public class ExampleCode
public static void main(String[] args)
Random rd = new Random();
Scanner sc = new Scanner(System.in);
int[] nums = new int[5];
for(int i = 0; i < nums.length; i++)
nums[i] = rd.nextInt(20) + 1;
OUT:
while(true)
System.out.println("请输入你猜的数字(1-20):");
int guessNumber = sc.nextInt();
for(int i = 0; i < nums.length; i++)
if(guessNumber == nums[i])
System.out.println("恭喜你!答对了,你猜的数字是:" + guessNumber);
break OUT; // 结束外循环
System.out.println("当前猜测的数据,在数组中不存在,请重新猜测");
for (int i = 0; i < nums.length; i++)
System.out.print(nums[i] + "\\t");
/*
运行结果:
请输入你猜的数字(1-20):
12
当前猜测的数据,在数组中不存在,请重新猜测
请输入你猜的数字(1-20):
6
当前猜测的数据,在数组中不存在,请重新猜测
请输入你猜的数字(1-20):
7
当前猜测的数据,在数组中不存在,请重新猜测
请输入你猜的数字(1-20):
14
当前猜测的数据,在数组中不存在,请重新猜测
请输入你猜的数字(1-20):
16
恭喜你!答对了,你猜的数字是:16
16 1 4 17 16
*/
随机排名
package com.example.code;
import java.util.Random;
import java.util.Scanner;
public class ExampleCode
public static void main(String[] args)
int[] jobNumber = new int[5];
Random rd = new Random();
Scanner sc = new Scanner(System.in);
for (int i = 0; i < jobNumber.length; i++)
System.out.println("请输入第" + (i + 1) + "员工的工号:");
jobNumber[i] = sc.nextInt();
System.out.print("你输入的工号为:" + " ");
for (int i = 0; i < jobNumber.length; i++)
System.out.print(jobNumber[i] + "\\t");
for (int i = 0; i < jobNumber.length; i++)
int index = rd.nextInt(jobNumber.length);
int temp = jobNumber[index];
jobNumber[index] = jobNumber[i];
jobNumber[i] = temp;
System.out.println("\\n");
for (int i = 0; i < jobNumber.length; i++)
System.out.print(jobNumber[i] + "\\t");
/*
运行结果:
请输入第1员工的工号:
1234
请输入第2员工的工号:
7479
请输入第3员工的工号:
5117
请输入第4员工的工号:
9876
请输入第5员工的工号:
2469
你输入的工号为: 1234 7479 5117 9876 2469
5117 2469 7479 9876 1234
*/
数组排序的技术
- 冒泡排序
- 选择跑徐
- 插入排序
- …
数组搜索相关的技术
- 二分搜索
- 分块查找
- 哈希表查找
- …
public class ExampleCode
public static void main(String[] args)
int[] arr = 2, 5, 3, 1;
// 定义一个循环,控制比较轮数
for (int i = 0; i < arr.length - 1; i++)
// 定一个循环,控制每轮比较次数
for (int j = 0; j < arr.length - i - 1; j++)
// 判断j当前位置的元素值是否大于后一个位置,若大于则交换
if (arr[j] > arr[j + 1])
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
for (int i = 0; i < arr.length; i++)
System.out.print(arr[i] + "\\t");
数组内存图、常见使用问题
Java内存介绍:
- 栈
- 堆
- 方法区
- 本地方法栈
- 寄存器
方法区:放Class文件的
栈内存:运行的方法、main方法、定义的变量
堆内存:对象
Debug工具使用
- IDEA自带的断点调试(排错)工具,可以控制代码从断点开始一行一行的执行,然后详细观看程序执行的情况。
Debug工具基本使用步骤:
- 在需要控制的代码左侧,点击一下,形成断点
- 选择使用Debug方式启动程序,启动后程序会在断点暂停
- 控制代码一行一行的往下执行
多个断点直接的跳转如下,点击左侧的Resume Program
方法定义格式、常见问题
方法是一种语法结构,它可以把一段代码封装成一个功能,以方便重复调用,提高代码复用性。
public class Demo1
public static void main(String[] args)
int res = sum(55, 45); // 调用方法
System.out.println(res);
public static int sum(int a, int b)
int c = a + b;
return c;
方法定义的完整格式:
修饰符 返回值类型 方法名(形参列表)
方法体代码(需要执行的功能代码)
return 返回值;
public static int sum(int a, int b)
int c = a + b;
return c;
修饰符: public static
返回值类型:int、double、String、void
方法名称:任意定义
形参列表:(参数1, 参数2)
返回值:return 需要返回的变量
调用格式:方法名(...)
方法格式的注意事项:
- 方法声明了具体的返回值类型,内部必须使用return返回对应类型的数据
- 形参列表可以有很多个,甚至可以没有;如果有多个形参必须用”,“隔开,且不能给初始化值
- 如果方法不需要返回结果,返回值类型必须声明成
void()
,此时方法内部不可以使用return返回数据。 - 方法的编写顺序无所谓(方法定义在调用位置的前后都可以)
- 方法与方法之间是平行关系,不能嵌套定义
- 方法的返回值类型为void(无返回值),方法内则不能使用return返回数据,如果方法的返回值类型写了具体类型,方法内部则必须使用return返回对应类型的数据。
- return语句下面,不能编写代码,return之后的代码执行不到,属于无效代码
- 方法不调用就不执行,调用时必须严格匹配方法的参数情况
- 有返回值的方法调用时可以选择定义变量的接收结果,或者直接输出调用,甚至直接调用;无返回值方法的调用只能调用;
无参数无返回的方法
public class Demo1
public static void main(String[] args)
print();
public static void print()
System.out.println("Hello,World");
System.out.println("Hello,World");
System.out.println("Hello,World");
方法案例:求和、判断奇偶数、求最值
求和
public class Demo1
public static void main(String[] args)
System.out.println("1-50的和:" + sum(50));
System.out.println("1-100的和:" + sum(100));
public static int sum(int n)
int sum = 0;
for (int i = 1; i <= n; i++)
sum += i;
return sum;
判断奇偶数
public class Demo1
public static void main(String[] args)
check(11);
check(100);
public static void check(int n)
黑马程序员Java教程学习笔记