黑马程序员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
*/
  • [表示是数组格式
  • DILjava.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类型为0double类型为0.0String类型为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工具基本使用步骤:

  1. 在需要控制的代码左侧,点击一下,形成断点
  2. 选择使用Debug方式启动程序,启动后程序会在断点暂停
  3. 控制代码一行一行的往下执行

多个断点直接的跳转如下,点击左侧的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
返回值类型:intdoubleStringvoid
方法名称:任意定义
形参列表:(参数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教程学习笔记

黑马程序员Java教程学习笔记

编写程序,使用嵌套if选择结构,根据出行的月份和选择的舱位输出实际的机票价格。

黑马程序员Java教程学习笔记

黑马程序员Java教程学习笔记

黑马程序员Java教程学习笔记