2017年3月10号课堂笔记

2017年3月10号  晴 空气质量:良

主要内容:数组,二维数组

一、操作数组的工具类Arrays

1、老师代码:

/**
* 操作数组的工具类!
*
*/
public class Arrays02 {

// equals(arr1, arr2) :比较两个数组的内容和长度 是否一致
@Test
public void testEquals() {
int[] nums1 = { 10, 20, 30, 50 };
int[] nums2 = nums1;
int[] nums3 = { 10, 20, 30 };
System.out.println("nums1与nums2比较:" + Arrays.equals(nums1, nums2));
System.out.println("nums1==nums2比较:" + (nums1 == nums2));
}

// sort(arr):对数组中的元素进行升序的排列
@Test
public void testSort() {
int[] nums = { 10, 50, 30, 20 };
Arrays.sort(nums);
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
}

/**
* toString :把一个数组变成字符串
* [10, 50, 30, 20] 集合toString的结果!
*/
@Test
public void testToString() {
int[] nums = { 10, 50, 30, 20 };
System.out.println(Arrays.toString(nums));
}

/**
* fill(arr,val):将arr数组中的所有元素都赋值成了val
*/
@Test
public void testFill() {
int[] nums = { 10, 50, 30, 20 };
System.out.println(Arrays.toString(nums));
Arrays.fill(nums, 100);
System.out.println(Arrays.toString(nums));
}

/**
* copyOf(arr,length):将数组arr复制成一个长度为length的新数组!
*/
@Test
public void testCopyOf() {
int[] nums = { 10, 50, 30, 20 };
int[] nums1 = Arrays.copyOf(nums, 3);
System.out.println(Arrays.toString(nums1));
}

/**
* binarySearch(arr,val):查询val在arr数组中的下标!
* 必须先升序排列! Arrays.sort(arr)!!!!
*/
@Test
public void testBinarySearch() {
int[] nums = { 10, 50, 30, 20 };
Arrays.sort(nums); // 10 20 30 50
System.out.println(Arrays.binarySearch(nums, 50));
}

}

2、自己代码:

package cn.bdqn.test;

import java.util.Arrays;

/**
*
*<P>Title<P>ArraysDemo04
*<P>Description<P>
*
* @author alex
* @date 2017-3-10上午9:04:40
* You can either travel or read,but either your body or soul must be on the way
*/
public class ArraysDemo04 {

public static void main(String[] args) {
System.out
.println("****************equals(arr1,arr2)*******************");
// equals(arr1,arr2):比较两个数组内容和长度是否一致;
int[] nums1 = { 10, 20, 30, 50 };
int[] nums2 = { 10, 20, 30, 50 };
int[] nums3 = { 10, 70, 30, 20 };
System.out.println("数组num1和num2的比较结果是:" + Arrays.equals(nums1, nums2));
System.out.println("******************sort(arr)*******************");
// sort(arr):对数组中的元素进行升序的排列
Arrays.sort(nums3);
for (int i = 0; i < nums3.length; i++) {
System.out.print(nums3[i] + " ");
}
System.out
.println(" *******************toString*********************");
// toString :把一个数组变成字符串
// [10, 20, 30, 70] 集合toString的结果!
System.out.println(Arrays.toString(nums3));
System.out.println("****************fill(arr,val)*****************");
// fill(arr,val):将arr数组中的所有元素都赋值成了val
Arrays.fill(nums2, 66);
for (int i = 0; i < nums2.length; i++) {
System.out.println(nums2[i] + " ");
}
System.out.println("**********copyOf(arr,length)***********");
// copyOf(arr,length):将数组arr复制成一个长度为length的新数组!
int[] nums4 = Arrays.copyOf(nums1, 6);
for (int i = 0; i < nums4.length; i++) {
System.out.print(nums4[i] + " ");
}
System.out.println(" *********binarySearch(arr,val)********");
// binarySearch(arr,val):查询val在arr数组中的下标!
// 必须先升序排列! Arrays.sort(arr)!!!!
Arrays.sort(nums4);
System.out.println(Arrays.binarySearch(nums4, 20));
}
}

二、打擂法和插入算法

1、老师代码:

// 打擂法 求数组中的最大值
@Test
public void test01() {
int[] nums = { 10, 50, 30, 200 };
// 默认的擂主
int max = nums[0];
// 让max依次和nums中的每一个元素进行比较
for (int i = 0; i < nums.length; i++) {
if (max < nums[i]) {
max = nums[i];
}
}
System.out.println("最大值:" + max);
}

/**
* 插入算法
*/
@Test
public void test02() {
// 先定义一个有序的数组
int[] nums = new int[5];
nums[0] = 100;
nums[1] = 90;
nums[2] = 80;
nums[3] = 10;
Scanner scanner = new Scanner(System.in);
System.out.println("请您输入一个插入的数据:");
int num = scanner.nextInt();
// 01.找到需要插入数据的位置
int index = nums.length;
// 02.循环找到位置
for (int i = 0; i < nums.length; i++) {
if (num > nums[i]) {
index = i; // 下标
break;
}
}
// 03.元素后移
for (int j = nums.length - 1; j > index; j--) {
nums[j] = nums[j - 1]; // 依次后移
}
// 04.插入数据
nums[index] = num;
System.out.println("插入数据的下表是:" + index);
System.out.println(Arrays.toString(nums));

}

2、自己代码:

package cn.bdqn.test;

/**
*
*<P>Title<P>ArraysDemo05
*<P>Description<P>
* 求最大值和插入数据
* @author alex
* @date 2017-3-10上午10:03:48
* You can either travel or read,but either your body or soul must be on the way
*/
import java.util.Arrays;
import java.util.Scanner;

public class ArraysDemo05 {
public static void main(String[] args) {
int[] nums = new int[6];
nums[0] = 10;
nums[1] = 30;
nums[2] = 70;
nums[3] = 90;
nums[4] = 100;
// 1、求最大值(打擂法)
int max = nums[0];// 假定nums[0]为最大值(擂主)
// 循环判断(打擂)
for (int i = 0; i < nums.length; i++) {
if (max < nums[i]) {
max = nums[i];
}
}
System.out.println("数组中最大值为:" + max);
System.out.println("************************");
// 2、插入数据
// 提示用户输入要插入的数据
Scanner input = new Scanner(System.in);
System.out.println("请输入想要插入的数据:");
int insert = input.nextInt();
int index = nums.length;// 定义要插入的下标位置
for (int i = 0; i < nums.length; i++) {
if (insert < nums[i]) {
index = i;
break;
}
}
// 后移数据
for (int j = nums.length - 1; j > index; j--) {
nums[j] = nums[j - 1];
}
// 插入新数据
nums[index] = insert;
// 输出验证
System.out.println(Arrays.toString(nums));
}
}

三、逆序输出字符及插入字符

1、老师代码:

public class CharSort03 {

/**
* 字符的逆序输出
*/
public static void main(String[] args) {
char[] chars = { 'a', 'f', 'c', 'g', 'z', 'y' };
// 升序
Arrays.sort(chars);
System.out.println("升序之后的字符===》" + Arrays.toString(chars));
// 逆序
System.out.println("逆序之后的字符====");
for (int i = chars.length - 1; i >= 0; i--) {
System.out.print(chars[i]);
}
}

@Test
public void test01() {
// char类型的默认值: 'u0000'
char[] chars = { 'a', 'c', 'f', 'g', 'y', 'z', 'u0000' }; // 必须有顺序

System.out.println(chars.length);
char c = 'x'; // 需要插入的字符
int index = chars.length;
// 找下标
for (int i = 0; i < chars.length; i++) {
if (c < chars[i]) {
index = i;
break;
}
}
// 元素后移
for (int j = chars.length - 1; j > index; j--) {
chars[j] = chars[j - 1];
}
// 插入数据
chars[index] = c;
for (int i = 0; i < chars.length; i++) {
System.out.print(chars[i]);
}
}
}

2、自己代码:

package cn.bdqn.test;

import java.util.Arrays;

/**
*
*<P>Title<P>ArraysDemo06
*<P>Description<P>
* 字符逆序输出及插入:
* a c u b e p f z
* 1)进行升序和逆序输出
* 2)向字符序列中插入新的字符
* 插入后字符序列仍保持有序
* @author alex
* @date 2017-3-10上午10:07:57
* You can either travel or read,but either your body or soul must be on the way
*/
public class ArraysDemo06 {
public static void main(String[] args) {
char[] arr = { 'a', 'c', 'u', 'b', 'e', 'p', 'f', 'z', 'u0000' };
// 升序输出
Arrays.sort(arr);
System.out.print("*******升序输出****** ");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
System.out.print(" *******逆序输出****** ");
// 逆序输出
for (int i = arr.length - 1; i > 0; i--) {
System.out.print(arr[i]);
}
// 插入新字符
char character = 'k';
int index = arr.length;
// 找位置
for (int i = 0; i < arr.length; i++) {
if (character < arr[i]) {
index = i;
break;
}
}
// 数据后移
for (int j = 0; j < index - 1; j++) {
arr[j] = arr[j + 1];
}
// 插入数据并输出插入后的数组
arr[index - 1] = character;
System.out.print(" *******插入后输出****** ");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]);
}
}
}

四、二维数组(结合双重循环知识)

难点:1)nullpointerexception(引用数据需要实例化(开辟空间),默认值是null)

2)对二维数组和双重循环的理解

1、老师代码:

public class DoubleArray04 {

public static void main(String[] args) {

int[] clazz = new int[3]; // 保存班级
int[] students = new int[5]; // 保存学生

}

@Test
public void test01() { // 声明的同时开辟空间
int[][] nums = new int[3][5]; // 3个班级各5名学生
}

@Test
public void test02() { // 先声明 再 开辟空间
int[][] nums;
nums = new int[3][5]; // 3个班级各5名学生
}

@Test
public void test03() { // 声明 开辟空间的同时赋值
int[][] nums = { { 1, 2, 3, 4, 5 }, { 1, 2, 3, 4, 5 },
{ 1, 2, 3, 4, 5 } };
System.out.println(nums.length);// 3个班级各5名学生
}

@Test
public void test04() {
int[][] nums = new int[3][5]; // 3个班级各5名学生
// 第二个班级的第三个学生
nums[1][2] = 50;
}

@Test
public void test05() {
int[][] nums = { { 1, 2, 3 }, { 10, 20, 30 }, { 100, 200, 300 } };

/**
* nums.length 车厢数
* nums[i].length 车厢中的座位数
* 双重循环:
* 外层循环执行一次,内存循环执行一遍!
*/
for (int i = 0; i < nums.length; i++) {
System.out.println("进入了第" + (i + 1) + "个车厢**********");
if (i == 2) {
break; // 跳出当前循环体
}
for (int j = 0; j < nums[i].length; j++) {
if (j == 2) {
break; // 跳出当前循环体
}
System.out.println(nums[i][j]);
}
}
}

/**
* 所有的引用数据类型如果没有实例化(开辟空间)! 不能使用!
* 因为引用数据类型的默认值 是 null!
*/
@Test
public void test06() {

int[][] nums = new int[5][];
System.out.println(nums.length);
nums[0] = new int[5]; // 开辟空间
nums[1] = new int[6];

nums[0][0] = 50; // 使用
nums[0][1] = 60;
nums[0][2] = 70;
nums[0][3] = 80;
System.out.println(nums[0].length);
System.out.println(nums[1].length);
}

}

2、自己代码:(复制老师代码测试体会)

package cn.bdqn.test;

import org.junit.Test;

/**
*
*<P>Title<P>ArraysDemo07
*<P>Description<P>
* 二维数组(老师代码复制过来消化)
* @author alex
* @date 2017-3-10下午4:11:41
* You can either travel or read,but either your body or soul must be on the way
*/
public class ArraysDemo07 {

public static void main(String[] args) {

int[] clazz = new int[3]; // 保存班级
int[] students = new int[5]; // 保存学生
System.out.println(clazz.length);
System.out.println(students.length);
}

@Test
public void test01() { // 声明的同时开辟空间
int[][] nums = new int[3][5]; // 3个班级各5名学生
System.out.println(nums.length);
}

@Test
public void test02() { // 先声明 再 开辟空间
int[][] nums;
nums = new int[3][5]; // 3个班级各5名学生
System.out.println(nums.length);
}

@Test
public void test03() { // 声明 开辟空间的同时赋值
int[][] nums = { { 1, 2, 3, 4, 5 }, { 1, 2, 3, 4, 5 },
{ 1, 2, 3, 4, 5 } };
System.out.println(nums.length);// 3个班级各5名学生
}

@Test
public void test04() {
int[][] nums = new int[3][5]; // 3个班级各5名学生
// 第二个班级的第三个学生
nums[1][2] = 50;
}

@Test
public void test05() {
int[][] nums = { { 1, 2, 3 }, { 10, 20, 30 }, { 100, 200, 300 } };

/**
* nums.length 车厢数
* nums[i].length 车厢中的座位数
* 双重循环:
* 外层循环执行一次,内存循环执行一遍!
*/
for (int i = 0; i < nums.length; i++) {
System.out.println("进入了第" + (i + 1) + "个车厢**********");
if (i == 2) {
break; // 跳出当前循环体
}
for (int j = 0; j < nums[i].length; j++) {
if (j == 2) {
break; // 跳出当前循环体
}
System.out.println(nums[i][j]);
}
}
}

/**
* 所有的引用数据类型如果没有实例化(开辟空间)! 不能使用!
* 因为引用数据类型的默认值 是 null!
*/
@Test
public void test06() {

int[][] nums = new int[5][];
System.out.println(nums.length);
nums[0] = new int[6]; // 开辟空间
nums[1] = new int[7];

nums[0][0] = 50; // 使用
nums[0][1] = 60;
nums[0][2] = 70;
nums[0][3] = 80;
System.out.println(nums[0].length);
System.out.println(nums[1].length);
// System.out.println(nums[2].length);未开辟空间,报错nullpointerexception
}

}

 最后一个demo的输出截图:

/**
* 所有的引用数据类型如果没有实例化(开辟空间)! 不能使用!会报错(nullpointerexception)

* 因为引用数据类型的默认值 是 null!
*/

五、考试

2017.03.10

15:02 开始,15:24 结束;答题时间:22 分钟;检查时间:0 分钟;
成绩:98分

六、作业

1、吃货联盟(下周一交)---->Come on!

2、视频看到继承--->Fighting!

3、做题(每天保持做题感觉)

七、老师辛苦了!

原文地址:https://www.cnblogs.com/wsnedved2017/p/6530514.html