第4周周报

一、java基础

二、啊哈算法

三、复习链表

java基础

1.构造方法:
作用:构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法。
格式: 方法的名字必须和类的名字完全一致。构造方法不允许写返回值类型,void也不能写。命名格式如下

public 类名称(参数类型 参数名称) {
    方法体
}

注意事项:
1.构造方法的名称要跟所在的类名称一模一样,包括大小写。
2.构造方法没有返回值类型,连void都不能写。
3.构造方法不能rerturn一个具体的值作为返回值。
4.如果没有编写构造方法,编译器会默认赠送一个构造方法:public Student(){}
5.如果写了至少一个构造方法,编译器将不再赠送。
6.构造方法也能进行重载(方法名称相同,参数列表不同)
测试代码:

定义类:

package day4;

public class Student {
    private int age;
    private String name;
    public Student(){
        System.out.println("无参数的构造方法执行!");
    }
    public Student(int age,String name){
        this.age = age;
        this.name = name;
        System.out.println("全参数的构造方法执行!");
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

main方法:

package day4;

public class student01 {
    public static void main(String[] args) {
        Student st1 = new Student();
        Student st2 = new Student(20,"小娟");
        System.out.println("姓名:"+st2.getName());
        System.out.println("年龄:"+st2.getAge());
        st2.setAge(22);
        st2.setName("卢文慧");
        System.out.println("姓名:"+st2.getName());
        System.out.println("年龄:"+st2.getAge());
    }
}

2.匿名对象
作用:经常和Scanner连用。
在这里插入图片描述

在这里插入图片描述
3.random
题目1:随机生成1~n范围的随机数。
方法:整体+1即可。
在这里插入图片描述
题目2:猜数(淼)
直接代码:

package day5;

import java.util.Random;
import java.util.Scanner;

public class useRandom03 {
    public static void main(String[] args) {
        int a = new Random().nextInt(5);
        /*System.out.println("请输入猜的数字:");
        int guess = new Scanner(System.in).nextInt();
        if(guess==a)
            System.out.println("猜对啦");
        else if(guess<a)
            System.out.println("猜小了");
        else
            System.out.println("猜大了");*/
        while(true){
            System.out.println("请输入猜的数字:");
            int guess = new Scanner(System.in).nextInt();
            if(guess==a) {
                System.out.println("猜对啦");
                break;
            }
            else if(guess<a)
                System.out.println("猜小了");
            else
                System.out.println("猜大了");

        }
    }
}

4.对象数组
重点:对象数组里面的元素存放的是对象的地址值

package day5;

public class Arry {
    public static void main(String[] args) {
        Person[] arr = new Person[3];
        Person one = new Person(28,"迪丽热巴");
        Person two = new Person(18,"古力娜扎");
        Person three = new Person(30,"马儿扎哈");
        arr[0] = one;
        arr[1] = two;
        arr[2] = three;
        System.out.println(arr[0].getName()+" 年龄:"+ arr[0].getAge());
        System.out.println(arr[1].getName()+" 年龄:"+ arr[1].getAge());
        System.out.println(arr[2].getName()+" 年龄:"+ arr[2].getAge());
    }
}

比如arr[0] = one中就是把one里面存放的地址值赋给了arr【0】所以后面才能用arr[0].age.

5.ArryList
格式:ArrayList list = new ArrayList<>();
1.常用方法:
在这里插入图片描述
演示:

package day5;

import java.util.ArrayList;

public class demoArryList {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("迪丽热巴");
        list.add("古力娜扎");
        list.add("马尔扎哈");
        System.out.println(list);
        String a = list.get(0);
        System.out.println(a);
        list.remove(2);
        System.out.println(list);
        int size = list.size();
        System.out.println(size);
        //遍历集合:
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }
}

题目1.添加随机数

package day5;

import java.util.ArrayList;
import java.util.Random;

public class addRandomTOArryList {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 0; i < 6; i++) {
            list.add(new Random().nextInt(33)+1);

        }
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }

}

题目2.添加对象到集合:自定义四个学生对象添加到集合,并遍历。

package day5;

import java.util.ArrayList;

public class solutionaddstudent {
    public static void main(String[] args) {
        Student one = new Student("赵丽颖",20);
        Student two = new Student("迪丽热巴",22);
        Student three = new Student("古力娜扎",26);
        Student four = new Student("马尔扎哈",200);
        ArrayList<Student> list = new ArrayList<>();
        list.add(one);
        list.add(two);
        list.add(three);
        list.add(four);
        for (int i = 0; i < 4; i++) {
            System.out.println(list.get(i).getName()+" 年龄:"+list.get(i).getAge());
        }

    }
}

题目三:格式化输出集合(淼)

package day5;

import java.util.ArrayList;

public class PrintArrylist {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(10);
        list.add(20);
        list.add(30);
        printArryList(list);

    }
    public static void printArryList(ArrayList<Integer> a){
        for (int i = 0; i < a.size(); i++) {
            System.out.print("{");
            if(i==0) {
                System.out.print(a.get(i));
            }
            else
            System.out.print("@"+a.get(i));
            if(i==a.size()-1){
                System.out.print("}");
            }
        }
    }
}

题目4.:筛选集合元素

package day5;

import java.util.ArrayList;
import java.util.Random;

public class ChoseArryList {
    public static void main(String[] args) {
        ArrayList<Integer> list1 = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            list1.add(new Random().nextInt());
        }
        System.out.println(list1);
        System.out.println("----------------------------");
        ArrayList<Integer> list2 = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            if(selectArryList(list1.get(i)))
                list2.add(list1.get(i));
        }
        System.out.println(list2);

    }
    public static boolean selectArryList(int num){
        if(num%2==0)
            return true;
        else
            return false;
    }

}

6.字符串*******

重点:

在这里插入图片描述
字符串变量保存的是地址值,指向的是堆中的字符数组。
对字符串变量进行修改实际上修改的是地址值,让其指向另一个字符数组,但是上一个字符串的内容没有改变。

1.字符串的创建:在这里插入图片描述

重点:3种构造方法:

package day5;

public class DemoString {
    public static void main(String[] args) {
        String str1 = new String();//空参构造方法
        System.out.println("字符串1是:"+str1);
        char[] ch = new char[] {'A','B','C'};//字符数组构造方法
        String str2 = new String(ch);
        System.out.println("字符串2是:"+str2);
        byte[] by = new byte[]{97,98,99};//底层字节数组构造方法
        String str3 = new String(by);
        System.out.println("字符串3是:"+str3);
    }
}

2.字符串常量池
问题:为什么st1st2为true而st2st3和st1st3为false?
在这里插入图片描述
1.字符串常量池:
程序当中直接写上的双引号字符都只出现在字符串常量池中(在堆中),而用其他构造方法写的字符串都出现在堆中。
**2.对于基本类型来说
是进行数值的比较,而对于引用类型来说==是进行地址的比较**。
也就是说st1和st2存储的地址值相等而和st3不等。
内存情况:
在这里插入图片描述
3.字符串的内容比较方法**
在这里插入图片描述
详细内容看代码里面的注释

package day5;

public class DemoEquals {
    public static void main(String[] args) {
        String st1 = "hello";
        String st2 = "hello";
        char[] ch = {'h','e','l','l','o'};
        String st3 = new String(ch);
        System.out.println(st1.equals(st2));
        System.out.println(st2.equals(st3));
        System.out.println("hello".equals(st3));//字符串常量也可以直接.equals
        /*注:当一个字符串常量和一个字符串变量比较时,推荐写常量.equals(变量名),就比如上一行的代码
             为什么?
             如果上写 :变量名.equals(常量)
             当变量为null时会出现空指针问题,会报错。因为变量为空指针时不能用 变量.的操作
             String st4 = null;
            System.out.println("hello".equals(st4));
            System.out.println(st4.equals("hello"));
        */
        System.out.println("HELLO".equalsIgnoreCase(st2));//忽略大小的的比较方法。

    }
}

4.字符串的常用获取方法

在这里插入图片描述
具体实现看代码

package day5;

public class DemoGetString {
    public static void main(String[] args) {
        String st1 = "hello";
        String st2 = "world";
        String st3 = st1.concat(st2);//字符串的拼接:concatenate
        System.out.println(st3);
        char ch = st1.charAt(1);//查找索引位置的字符
        System.out.println(ch);
        int i ="qeqweqweqrqwetrkwjkladm,x,.Zc/".length();//返回字符串的长度
        System.out.println(i);
        int num = st1.indexOf("ll");//返回参数里面的字符串在原来字符串中第一次出现的索引值,如果没有出现返回-1.
        System.out.println(num);
    }
}

5.字符串的截取方法substring()
详细内容看代码:

package day5;

public class Demosubstring {
    public static void main(String[] args) {
        String st1 = "helloworld";
        String st2 = st1.substring(5);//从索引值到字符串的末尾进行截取
        System.out.println(st2);
        String st3 = st1.substring(4,7);//从4~6的索引值进行截取范围是【a,b).
        System.out.println(st3);
    }
}

6.字符串的转化convert
在这里插入图片描述
详细内容看代码:

package day5;

public class DemoConvertString {
    public static void main(String[] args) {
        String st1 = "hello";
        //将字符串转化为字符数组
        char[] ch = st1.toCharArray();
        for (int i = 0; i < ch.length; i++) {
            System.out.println(ch[i]);
        }
        System.out.println("=================");
        //将字符串转化为底层的二进制数组
        byte[] by = st1.getBytes();
        for (int i = 0; i < by.length; i++) {
            System.out.println(by[i]);
        }
        System.out.println("===============");
        //将字符串中的某个部分用新的字符串替代
        String st2 = "傻逼东西,你妈死了?";
        String st3 = st2.replace("傻逼","*");
        String st4 = st3.replace("你妈","*");
        String st5 = st1.replace("o","*");
        System.out.println(st5);
        System.out.println(st3);
        System.out.println(st4);

    }
}

7.字符串的分割
在这里插入图片描述
注意:图片里面的注意事项。
具体操作看代码:

package day5;

public class DemoSplitString {
    public static void main(String[] args) {
        String st1 = "aaa,bbb,ccc";
        String[] arr1 = st1.split(",");
        for (int i = 0; i < arr1.length; i++) {
            System.out.println(arr1[i]);
        }
        System.out.println("==================");
        String st2 = "aaa.bbb.ccc";
        String[] arr2 = st2.split("\\.");//当以“.”分割时用“\\.”;
        for (int i = 0; i < arr2.length; i++) {
            System.out.println(arr2[i]);
        }

    }
}

8.练习
1.拼接字符串
注:对字符串来说“+”是进行拼接。跟sout里面的+是一个原理。

package day5;

public class solutionConcateString {
    public static void main(String[] args) {
        int[] arr = {1,2,3};
        String st = getString(arr);
        System.out.println(st);
    }
    public static String getString(int[] arr){
        String st = "[";
        for (int i = 0; i < arr.length; i++) {
            if(i==arr.length-1)
                st+="world"+arr[i]+"]";
            else
                st+="world"+arr[i]+"#";
        }
        return st;
    }
}

2.统计各种类型的字符在字符串中出现的次数
直接看代码:
我的:将字符串转化为yte数组然后用对应的数字进行判断

package day5;

import java.util.Scanner;

public class solutionStringKindCount {
    public static void main(String[] args) {
        System.out.println("请输入字符串:");
        String st = new Scanner(System.in).next();
        int xiaoxie = 0;
        int daxie = 0;
        int num = 0;
        int qita = 0;
        byte[] by = st.getBytes();
        for (int i = 0; i < by.length; i++) {
            if(by[i]<97&&by[i]>=65)
                daxie++;
            else if(by[i]>=97&&by[i]<129)
                xiaoxie++;
            else if(by[i]>=48&&by[i]<65)
                num++;
            else
                qita++;
        }
        System.out.println("小写:"+xiaoxie);
        System.out.println("大写"+daxie);
        System.out.println("数字:"+num);
        System.out.println("其他"+qita);
    }
}

视频上的:将字符串转化为字符数组,与‘a’‘z’‘A’'Z’等进行比较,因为字符类型在进行运算时(包括比较大小,会自动提升称为int类型)
在这里插入图片描述

7.static(学起来很绕)

视频中的重点:
1.静态不能访问非静态。
原因:因为在内存中先有的静态内容,后有的非静态内容。
理解:静态内容是属于类的。直接使用类名称就能调用,而非静态需要通过对象才能调用(非静态属于对象),如果一个静态调用了非静态(属于对象的东西),系统就会不知所措(不知该使用哪一个对象的属性)。
在这里插入图片描述

别人的东西:主要讲了静态成员变量
非常详细
静态内存图:
在这里插入图片描述
重点:静态变量通过类名称访问,全程和对象没有关系。
静态代码块
在这里插入图片描述
**
8.Arrays
在这里插入图片描述
toString方法是将一个数组按照默认格式转化为字符串,能够直接sout输出。
看代码:

package day6;

import java.util.ArrayList;
import java.util.Arrays;

public class DemoArrys {
    public static void main(String[] args) {
        String[] st = {"abc","aaa","bcd"};
        Arrays.sort(st);
        System.out.println(st);
        System.out.println(Arrays.toString(st));
    }
}

题目:(淼)将一个随机字符串中的字符升序排列,然后倒序输出
直接上代码:

package day6;

import java.util.Arrays;

public class SolutionArrays {
    public static void main(String[] args) {
        String st = "adadgfgdfhdhdgg";
        char[] ch = st.toCharArray();
        Arrays.sort(ch);
        for (int i = ch.length-1; i >=0; i--) {
            System.out.print(ch[i]);
        }
    }
}

9.数学工具类Math
在这里插入图片描述
题目(淼)

package day6;
/*
计算在-10.8~5.9之间绝对值大于6或小于2.1的整数有多少个
*/
public class SolutionMath {
    public static void main(String[] args) {
        int cnt = 0;
        double i = Math.ceil(-10.8);
        double j = Math.floor(5.9);
        for(int n = (int)i;n<=j;++n){
            if(Math.abs(n)>6||Math.abs(n)<2.1)
                ++cnt;
        }
        System.out.println(cnt);
    }
}

10.继承

继承的概述:
在这里插入图片描述
继承主要解决的问题是:共性抽取。
格式:
在这里插入图片描述

成员变量的访问:
在这里插入图片描述
区分三种重名:
新:super.成员变量 代表父类的那个成员变量。
在这里插入图片描述
具体例子:
在这里插入图片描述
成员方法的访问规则:
在这里插入图片描述

覆盖重写

1.规则
在这里插入图片描述

2.继承的理解(用处)

在这里插入图片描述
具体的代码例子:(super.show是用来继承原来手机中show方法的内容)
在这里插入图片描述
父子类构造方法的访问特点:
在这里插入图片描述
super关键字的三种用法:图片中很详细
在这里插入图片描述
继承的三大特点:
在这里插入图片描述

抽象:

1.抽象方法和抽象类的格式:

在这里插入图片描述

二、啊哈算法

**
1.快速排序
感觉也没什么好特殊说明的,直接来代码:
C语言:

# include<stdio.h>

int a[101];
int n;

void quicksort(int left,int right)
{
	int temp,t,i,j;
	if(left>right)
	return;
	i = left;
	j = right;
	temp = a[left];
	while(i!=j)
	{
		while(a[j]>=temp && i<j)
		j--;
		while(a[i]<=temp && i<j)
		i++;
		if(i<j)
	   {
		  t = a[i];
		  a[i] = a[j];
		  a[j] = t;
       }
	}
	a[left] = a[i];
	a[i] = temp;
	quicksort(left,i-1);
	quicksort(i+1,right);
}
int main(void)
{
	printf("请输入长度:\n");
	scanf("%d",&n);		
	int i;
	for(i = 1;i<=n;++i)
	{
		printf("第%d个数据是:\n",i);
		scanf("%d",&a[i]); 
	}
	quicksort(1,n);
	printf("====================\n");
	for(i = 1;i<=n;++i)
	{
		printf("%d ",a[i]); 
	}
	
	return 0;
} 

java:

package day6;

import java.util.Scanner;

public class quicksort {
    public static void main(String[] args) {
        System.out.println("请输入长度");
        int n = new Scanner(System.in).nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < arr.length; i++) {
            System.out.println("第"+(i+1)+"个数是:");
            arr[i] = new Scanner(System.in).nextInt();
        }
        qsort(arr,0,n-1);
        System.out.println("=================================");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }

    }
    public static void qsort(int[] a,int left,int right){
        int t,temp,i,j;
        if(left>right)
            return;

        temp = a[left];
        i = left;
        j = right;
        while(i!=j){
            while(a[j]>=temp&&i<j)
                j--;
            while(a[i]<=temp&&i<j)
                i++;
            if(i<j) {
                t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
        a[left] = a[i];
        a[i] = temp;

        qsort(a,left,i-1);
        qsort(a,i+1,right);
    }
}

题目:第四节:小哼买书:

p21
改题目的关键就是去重。
有两种方法:
1.去重在排序。(桶排序的思想)。
2.先排序再去重(挨个遍历,如果该元素与它之前的元素的值不相等就打印)
上代码:
1.

# include<stdio.h>
int main(void)
{
	int a[1001] = {};
	int i,n,j,cnt = 00;
	scanf("%d",&n);
	for(i = 0;i<n;++i)
	{
		scanf("%d",&j);
		a[j] = j;
	}
	for(i = 1;i<=1000;++i)
	{
		if(a[i]!=0)
		{
			++cnt;
			printf("%d\n",i);
		}
	}
	printf("%d\n",cnt);
	return 0;
} 
# include<stdio.h>
int main(void)
{
	int a[101];
	int n;
	scanf("%d",&n);
	for(i = 0;i<n;++i)
	{
		scanf("%d",&a[i]);
	}
	for(i = 0;i<n-1;++i)
	{
		for(j = 0;j<n-1-i;++j)
		{
			if(a[j]>a[j+1])
			{
				t = a[j];
				a[j] = a[j+1];
				a[j+1] = t;
			}
		}
	}
	printf("%d",a[0]);//先打印第一个,从第二个开始判断 
	for(i = 1;i<=n;++i)
	{
		if(a[i]!=a[i-1])
		printf("%d",a[i]);
	}
	
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值