p169-201
数组(第六章)
数组扩容
此时原来的数组arr被销毁。
牛蛙:
最后再加一句
SYstem。out。println(“是否添加?”);
char key = myscanner。netx()。charAT(0);
if (key==‘n’)
break;
就结束了~~
数组缩减
成功了
import java.util.Scanner;
public class day9{
public static void main(String[] args){
int[] arr = {1,2,3,4,5};
char key=0;
Scanner mysc = new Scanner(System.in);
do{
for(int i =0;i<arr.length;i++){
System.out.print(arr[i]+"\t"); }
if(arr.length>0){
System.out.println("\nshort?y/n");
key = mysc.next().charAt(0);
if(key=='n')
{break;}
int[] arrn = new int [arr.length-1];
for(int i =0;i<arrn.length;i++){
arrn[i]=arr[i];
}
arr=arrn;
}
else
{System.out.println("it's too short,stop!");
break;}
}while(true);
}
}
排序
冒泡排序
成功了
哎哟你把这句写在for里面不就行了吗,我是猪
优化思路:如果这个数组本身就是有序的,你在某一轮排序的过程中发现一次都没有进行交换,可以提前终止这个排序!
查找
张无忌学java是吧
牛蛙:
使用index=-1来记录有没有找到。
多维数组
这里就讲二维数组。
int[][] arr ={{1,2,3},{4,5,6}};
int i = arr.length;\\这个可以看这个二维数组里有多少个一维数组
int j = arr[i].length;\\每个一维数组有多少个元素
然后就可以输出a[i][j]了。
还能这样用啊?
和c语言不一样的是,c语言的二维数组地址是连续的。
二维数组的使用
它每个一维数组可以是不一样大的,比如
1
1 2
1 2 3
一共3个1维数组,但是每个1维数组的元素是不一样的。
这样用:
int [] [] arr = new int[3] [];\\创建2维,但是只确定有几个1维
for(int i = 0;i<arr.length;i++){
arr[i] = new int[i+1];\\遍历给它开空间!
for(int j = 0;i<arr[i].length;j++){
arr[i][j] = i+1;\\赋值
}
}
练习
杨辉三角:
import java.util.Scanner;
public class day9{
public static void main(String[] args){
Scanner mysc = new Scanner(System.in);
System.out.println("in put the layer?");
int n = mysc.nextInt();
int[][] a = new int[n][];
for(int i = 0;i<a.length;i++){
a[i]=new int[i+1];//malloc the ith layer
for(int j =0;j<a[i].length;j++){
if(j==0||j==a[i].length-1){
a[i][j]=1;
}
else if(i>1){
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
}
//print~
for(int i = 0;i<a.length;i++){
for(int k =0;k<a.length-i;k++){
System.out.print(" ");
}
for(int j =0;j<a[i].length;j++){
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
}
本章作业
第一题
A里面的元素不是string
B对
C?不对
D?对
E?不对
第二题
blue,boolean默认是false
第三题
1
3
5
7
第四题
老师这个妙啊!双指针0186_韩顺平Java_本章作业3_哔哩哔哩_bilibili
第五题
随机数生成:
第六题
a,a
z,z
韩,韩
c,c
第七题
前面有,虐
类与对象(第七章)
一个程序就当是一个世界,有很多事物(对象【属性,行为】)
如狗是一个对象,属性有毛色、年龄,行为有跑,吃东西。
类:数据类型
对象:一个具体的实例
结构体?
对象在内存中存在形式:
对象和数组一样也是引用类型
属性:成员变量=属性=field(字段),属性是类的一个组成部分,一般是基础数据类型,也可以是引用类型(对象、数组)。
属性的定义语法同变量,例:
访问修饰符 属性类型 属性名;
访问修饰符是控制属性的访问范围,有四种访问修饰符public,proctected,默认,private
属性如果不赋值,会有默认值,跟数组一样。
创建对象&访问属性
1.先声明再创建
Cat cat;
cat = new cat();
2.直接创建
Cat cat = new Cat();
类与对象的内存分配机制(重要)
java内存结构:
1.栈:一般存放基本数据类型(局部变量)
2.堆:存放对象(数组,Cat等)
3、方法去:常量池(常量,比如字符串),类加载信息
创建对象的流程:
1.先加载Cat类信息(属性和方法信息只会加载一次)
2.在堆中分配空间,进行默认初始化
3.把地址赋给cat1,cat1就指向对象
4.进行指定初始化,比如cat1.name=“jack”;
练习:
小明
200
异常报错 (空指针?)
成员方法(简称方法)
在某些情况下,我们需要定义成员方法,简称方法。比如人类:出了一些属性外(年龄、姓名...),还有一些行为(吃饭、拉屎),这是就要用成员方法来完成。
学不动了,明天再搞。这一大坨不想断开学