软件设计之Java入门视频(6)

软件设计之Java入门视频(6)

视频教程来自B站尚硅谷:

尚硅谷Java入门视频教程,宋红康java基础视频
相关文件资料(百度网盘)
提取密码:8op3
idea 下载可以关注 软件管家 公众号

学习内容:

该视频共分为1-717部分
本次内容涉及150-179
在写代码时,总是需要来回切换界面来看代码要求,这里推荐Snipaste,可以把截图以窗口形式放在屏幕上
记录内容:

  1. 二维数组
  2. 冒泡排序与快速排序
  3. 数组工具Arrays
  4. 两种常见的数组报错内容
  5. 面向对象与面向过程

1、二维数组

二维数组的遍历

int[][] arr = new int [][]{ {1,2,3},{4,5,7,8},{6,7,8}};
for (int i = 0; i< arr.length;i++){
	for(int j = 0; j< arr[i].length;j++)
	{
		System.out.print(arr[i][j] + "" );
	}
	System.out.println();
}

二维数组的内存解析

在这里插入图片描述

数组的判断与训练题

声明int[] x,y[]; 在给x,y变量赋值以后,以下选项允许通过的是:

//x是一维数组;  y是二维数组
x[0] = y; //no
y[0] = x; //yes
y[0][0] = x; //no
x[0][0] = y; //no
y[0][0] = x[0]; //yes
 x = y; //no

使用二维数组打印一个 10 行杨辉三角。
【提示】

  1. 第一行有 1 个元素, 第 n 行有 n 个元素、
  2. 每一行的第一个元素和最后一个元素都是 1
  3. 从第三行开始, 对于非第一个元素和最后一个元素的元素。即:
    yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];
    在这里插入图片描述
public class FamilyAccount {

    public  static void  main(String[] args) {
        int [][] yanghui = new int[10][];

        for (int i = 0; i<yanghui.length; i++){
            yanghui[i] = new int[i+1]; //这一步非常关键 它创建了二维数组地址所指向的一维数组
            for(int j = 0; j<=i; j++){
                if (i<=1){
                    yanghui[i][j] = 1;
                } else {
                    if (j==0 || j ==i ){
                        yanghui[i][j] = 1;
                    }else{
                        yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];
                    }
                }
                System.out.print(yanghui[i][j] + " ");
            }
            System.out.println();
        }

    }
}

数组复制、反转、查找(线性查找、二分法查找)

public class FamilyAccount {

    public  static void  main(String[] args) {
        String [] arr = new String[]{"JJ","DD","MM","BB","GG","AA"};
        //数组复制 (不可以arr1 = arr,那是地址赋值)
        String[] arr1 = new String [arr.length];
        for (int i = 0;i< arr.length;i++){
            arr1[i] = arr[i];
        }

        //数组反转
        for (int i = 0;i< arr.length/2;i++){
            String temp = arr[i];
            arr[i] = arr[arr.length - i - 1];
            arr[arr.length - i - 1] = temp;
        }

        //线性查找
        String dest = "BB";
        boolean isFlag = true ;
        for (int i = 0;i< arr.length;i++){
            if (dest.equals(arr[i])){
                System.out.println("找到了指定元素,位置为:" + i);
                isFlag = false;
                break;
            }
        }
        if (isFlag){
            System.out.println("没找到");
        }

    }
}

二分法查找:
前提:所要查找的数组必须有序
该图引自详解二分法
在这里插入图片描述

public class FamilyAccount {

    public  static void  main(String[] args) {
        int[] arr = new int[]{-98,-34,2,34,54,66,78,103,242,553};

        int dest = -34;
        int head = 0;
        int end = arr.length - 1;
        boolean isFlag = true;
        while (head <=end){
            int middle = (head + end) / 2 ;
            if (arr[middle] == dest){
                System.out.println("找到了指定元素,位置为:" + middle);
                isFlag = false;
                break;
            } else if(arr[middle] > dest) {
                end = middle - 1;
            }else {
                head = middle + 1;
            }
        }
        if (isFlag){
            System.out.println("没找到");
        }

    }
}

2、 冒泡排序与快速排序

冒泡排序

介绍:
冒泡排序的原理非常简单,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。排序思想:

  1. 比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较为止。
public class FamilyAccount {

    public  static void  main(String[] args) {
        int[] arr = new int[]{43,32,76,-98,0,64,33,-21,32,99};
        for (int i = 0; i<arr.length - 1; i++){
            for(int j = 0; j<arr.length - 1 - i; j++) {
                if(arr[j] > arr[j+1]){
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }

        }
        for (int i = 0; i<arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

快速排序

排序思想:

  1. 从数列中挑出一个元素,称为"基准"(pivot),
  2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区操作。
  3. 递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。
  4. 递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会结束,因为在每次的迭代中,它至少会把一个元素摆到它最后的位置去。
    在这里插入图片描述

3、数组工具Arrays

import java.util.Arrays;
import java.util.Scanner;
public class FamilyAccount {

    public  static void  main(String[] args) {
        //1、 boolean equals(int[] a, int[] b): 判断两个数组是否相等
        int [] arr1 = new int[]{1,2,3};
        int [] arr2 = new int[]{2,1,3};
        boolean isEquals = Arrays.equals(arr1,arr2);
        System.out.println(isEquals); //false

        //2、String toString(int[] a):输出数组信息
        System.out.println(Arrays.toString(arr1));

        //3、void fill(int[] a,int val): 将指定值填充到数组之中
        Arrays.fill(arr1,10);
        System.out.println(Arrays.toString(arr1));  // 10 10 10

        //4、void sort(int[] a):对数组进行排序
        Arrays.sort(arr2);  // 1 2 3
        System.out.println(Arrays.toString(arr2));

        //5、int binarySearch(int[] a,int key) // 二分法查找
        int[] arr3 = new int[]{-98,-34,2,34,54,66,79,105,210,333};
        int index = Arrays.binarySearch(arr3,211);
        if(index >=0){
            System.out.println(index);
        }else{
            System.out.println("没找到");
        }
    }
}

4、两种常见的数组报错内容

数组角标越界异常

ArrayIndex Out Of BoundsException 是一种常见的运行时异常,表示程序试图访问数组的非法索引。以下是 ArrayIndexOutOfBoundsException 发生的几种常见情况

//尝试访问数组的负索引会导致此异常:
int[] arr = {1, 2, 3};
System.out.println(arr[-1]); // 报 ArrayIndexOutOfBoundsException
//访问超过数组长度的索引:
int[] arr = {1, 2, 3};
System.out.println(arr[3]); // 报 ArrayIndexOutOfBoundsException
//循环中索引越界:
int[] arr = {1, 2, 3};
for (int i = 0; i <= arr.length; i++) {
    System.out.println(arr[i]); // 当 i 为 3 时,报 ArrayIndexOutOfBoundsException
}
//多维数组的索引越界
int[][] arr = {{1, 2}, {3, 4}};
System.out.println(arr[2][0]); // 报 ArrayIndexOutOfBoundsException
System.out.println(arr[0][2]); // 报 ArrayIndexOutOfBoundsException

空指针异常

Null Pointer Exception
数组报空指针异常的主要原因可以归结为以下两种情况:
1 数组引用为 null: 当你声明了一个数组但没有初始化它时,该数组引用会是 null。此时,任何对该数组引用的操作都会导致空指针异常。
2 数组中存储的元素为 null: 当数组是对象类型的数组(例如 String 数组或自定义类的数组),即使数组本身已初始化,但其中的元素没有初始化(元素为 null),对这些 null 元素的操作 也会导致空指针异常(直接访问这个变量不会引发 NullPointerException,因为你只是读取它的值,而不是调用它的方法或访问它的属性。)。

//数组引用为 null
int[] arr = null;
System.out.println(arr.length); // 报空指针异常
//数组中存储的元素为 null
String[] strArray = new String[5];
System.out.println(strArray[0].length()); // 报空指针异常

5、面向对象与面向过程

面向过程(POP) 与 面向对象(OOP)
    二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
    面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。
在这里插入图片描述

面向对象

是对一类事物的描述,是抽象的、概念上的定义
对象是实际存在的该类事物的每个个体,因而也称为实例(instance)

类主要有两个内容:属性和行为
其中属性对应着成员变量行为对应着成员方法

public class FamilyAccount {

    public  static void  main(String[] args) {
        //创建Person类的对象
        Persion p1 = new Persion();

        //调用对象的结构:属性、方法
        //调用属性: “对象.属性”
        p1.name = "Mary";
        p1.age = 18;
        p1.isMale = true;
        System.out.println(p1.name);

        //调用方法:“对象.方法”
        p1.eat();
        p1.sleep();
        p1.talk("Chinese");
    }
}

class Persion{

    //属性
    String name;
    int age = 1; //默认值
    boolean isMale;

    //方法
    public  void eat(){
        System.out.println("人可以吃饭");
    }
    public  void sleep(){
        System.out.println("人可以睡觉");
    }
    public  void talk(String language){
        System.out.println("人可以说话,使用的是" + language);
    }
}
  • 21
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java爬虫是一种常用的网络数据抓取工具,用于获取网站上的信息并进行处理。学习Java爬虫,最好以视频教程为辅助,有系统的讲解和示例代码能更好地帮助理解和掌握相关知识。以下是关于Java爬虫入门到精通视频下载的相关建议。 网上有很多提供Java爬虫教程的平台,包括一些知名的在线学习网站、视频教育平台以及技术社区等。在这些平台上,你可以找到很多适合不同水平的视频教程,从入门到进阶都有涵盖。 首先,你可以在这些平台上搜索关键词"Java爬虫",然后在结果中筛选出类型为视频课程的内容。浏览不同课程的介绍、评价和课时等内容,选择适合自己的教程。评价好、内容丰富,并且有系统的教学大纲和实例代码是选择的重要参考因素。 其次,由于你需要从入门到精通,所以建议选择一套连贯性强的课程,例如一个系列教程,或者一个精心设计的教学计划。这样能够确保学习的完整性,避免学习的断层和重复。 在下载视频教程前,应确保你的设备有足够的空间来存储这些视频文件,并且有可用的网络或者下载工具。很多教学平台提供视频下载的功能,你可以选择购买或者租赁这些课程的视频。另外,你也可以通过一些第三方软件或者在线工具来下载这些教程,注意选择安全可靠的资源。 在学习过程中,要多动手实践,在教学视频中的每个章节或者课时后进行相关练习。通过实际操作来加深理解和熟练相关技术。同时,要多阅读官方文档和相关书籍来弥补教学视频中没有涉及到的知识点,提升自己的编程水平。 总之,Java爬虫是一个需要系统学习和实践的技术领域。通过下载视频教程并按照教学计划逐步学习,结合实际练习和深入阅读相关资料,你将能够在Java爬虫领域逐渐达到精通的水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值