高级编程--第二章 实用类介绍

1、 目标

能够定义并使用枚举类型

掌握包装类及装箱、拆箱的概念

会使用Math类进行数学运算

会使用Random类获取随机数

会使用String操作字符串

2、枚举

枚举是指由一组固定的常量组成的类型

语法:

enum 类名{
  常量1,常量2,...;
}

  //使用
  enum Color{
    RED,BLUE,GREEN;
  }
  public static void main(String[] args){
        Color c = Color.RED;
        System.out.println(c);
  }

优点

类型安全 易于输出 代码清晰

3、Java-API

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节

说白了就是别写写好的函数,供你直接调用

常用java API

java.lang

enum、包装类、Math、String、StringBuffer、System.....

java.util

java.io

java.sql

4、包装类

包装类把基本数据类型转换为对象

每个基本类型在java.lang包中都有一个相应的包装类

包装类的作用

提供了一系列实用的方法

集合不允许存放基本数据类型数据、存放数字时,要用包装类型

包装类的构造方法

所有包装类都可以将与之对应的基本数据类型作为参数,来构造他们的实例

public Type (type value)

如: Interger i = new Integer(1);

除Character类外,其他包装类可将一个字符串作为参数构造它们的实例

public Type(String value)

如:Integer i = new Integer("123");

注意事项

Boolean类构造方法参数为String类型时,若该字符串内容为true(不考虑大小写),若该Boolean对象表示true,否则表示false

当Number包装类构造方法参数为String类型时,字符串不能为null,且该字符串必须可解析为相应的基本数据类型的数据,否则编译不通过,运行时会抛出NumberFormatException异常

XXXValue():包装类转换成基本类型

Integer integerId=new Integer(25);
int intId=integerId.intValue();

toString():以字符串形式返回包装对象表示的基本数据类型(基本数据类型->字符串)

String sex=Character.toString('男');
String id=Integer.toString(25);
String sex='男'+"";
String id=25+"";

parseXXX():把字符串转换为相应的基本数据类型数据(Character除外)(字符串->基本类型)

valueOf()

所有包装类都有如下方法:

public static Type valueOf(Type value)
如:
Integer intValue = Integer.valueOf(21);

除Character类外,其他包装类都有如下方法(字符串->包装类)

public static Type valueOf(Srting s)
如:
Integer intValue = Integer.valueOf("21");

4、装箱和拆箱

基本类型和包装类的自动转换

Integer intObject = 5;
int intValue = intObject;

装箱:基本数据类型转换为包装类的对象

拆箱:包装类对象转换为基本类型的值

5、包装类的特点

JDK1.5后,允许基本数据类型和包装类型进行混合数学运算

包装类并不是用来取代基本数据类型的

在基本数据类型需要用对象表示时使用

6、Math类

java.lang.Math类提供了常用的数学运算方法和两个静态常量E(自然对数的底数)和PI(圆周率)

Math.abs(-3.5); //返回3.5
Math.max(2.5, 90.5);//返回90.5
int random = (int) (Math.random() * 10); //生成一个0-9之间的随机数

7、Random类

生成随机数的其他方式

java.util.Random类

Random rand=new Random(); //创建一个Random对象
for(int i=0;i<20;i++){//随机生成20个随机整数,并显示
         int num=rand.nextInt(10);//返回下一个伪随机数,整型的   	System.out.println("第"+(i+1)+"个随机数是:"+num);
} 

用同一个种子值来初始化两个Random 对象,然后用每个对象调用相同的方法,得到的随机数也是相同的

8、String类

String类提供了length()方法,确定字符串的长度

返回字符串中的字符数

8.1 equals方法

String类提供了equals()方法,比较存储在两个字符串对象的内容是否一致

原理:equals():检查组成字符串内容的字符是否完全一致

与==的区别

==:判断两个字符串在内存中的地址,即判断是否是同一个字符串对象

字符串比较的其他方法

使用equalsIgnoreCase()忽略大小写

使用toLowerCase()小写

使用toUpperCase()大写

9、字符串连接

方法一、使用 "+"、

方法二、使用String类的concat()方法

字符串常用的提取方法

方法名

说明

public int indexOf(int ch)

搜索第一个出现的字符ch(或字符串value),如果没有找到,返回-1

public int indexOf(String value)

public int lastIndexOf(int ch)

搜索最后一个出现的字符ch(或字符串value),如果没有找到,返回-1

public int lastIndexOf(String value)

public String substring(int index)

提取从位置索引开始的字符串部分

public String substring(int beginindex, int endindex)

提取beginindexendindex之间的字符串部分

public String trim()

返回一个前后不含任何空格的调用字符串的副本

练习

练习一

为大数据岗位课程三个学习阶段定义枚举:L1、L2、L3,分别表示第一、二、三阶段编程输出每个单元的学习目标L1:大数据开发工程师L2:大数据挖掘工程师L3:大数据架构师

package exercise01;

public class Test {
    enum stage{
        L1,L2,L3;
    }
    public static void main(String[] args) {
        for (stage s : stage.values()){
            switch(s){
                case L1 :
                    System.out.println("大数据开发工程师");
                    break;
                case L2 :
                    System.out.println("大数据挖掘工程师");
                    break;
                case L3 :
                    System.out.println("大数据架构师");
                    break;
            }
        }
    }
}

练习二、

需求说明实现会员注册,要求用户名长度不小于3密码长度不小于6注册时两次输入密码必须相同

package exercise02;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(true) {
//            User u = new User();
//            System.out.println("请输入用户名");
//            u.setName(sc.next());
//            System.out.println("请输入密码");
//            u.setPwd(sc.next());
//            System.out.println("请再次输入密码");
//            u.setPwd(sc.next());
            String name, pwd, pwd1;
            System.out.println("请输入用户名");
            name = sc.next();
            System.out.println("请输入密码");
            pwd = sc.next();
            System.out.println("请再次输入密码");
            pwd1 = sc.next();
            if (name.length() < 3) {
                System.out.println("用户名长度不能小于3");
            }
            if (pwd.length() < 6) {
                System.out.println("密码长度不能小于6");
            }
            if (!pwd.equals(pwd1)) {
                System.out.println("两次输入密码不同");
            }
            if (name.length() >= 3 && pwd.length() >= 6 && pwd.equals(pwd1)){
                System.out.println("注册成功,请牢记账号密码");
                break;
            }
        }

    }
}

练习三

需求说明输入一个字符串,再输入要查找的字符,判断该字符在该字符串中出现的次数

package exercise03;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        String s;
        Scanner sc= new Scanner(System.in);
        System.out.println("请输入一个字符串");
        s = sc.next();
        System.out.println("请输入您要查找的字符");
        String key = sc.next();
        int i = 0;
        for (int j = 0;j<s.length();j++){
            if (key.equals(s.substring(j,j+1))){
                i += 1;
            }else {
                continue;
            }
        }
        System.out.println("\"" + s + "\"" + "中包含" + i + "个" + "\"" + key + "\"");
    }
}

作业

作业一

1.定义一个方法listTest(ArrayList<Integer> al, Integer s),要求返回s在al里面第一次出现的索引,

 al.add(1);
 al.add(10);
 al.add(8);
 
 int s = 8;
    
  return al.indexOf(s);
   
 
   for(int i=0;i<al.size();i++)
   {
       if(s==al.get(i))
       {
         return i;
       }
   
   }
   
   return -1;

如果s没出现过返回-1,有返回下标

package homework01;

import java.util.ArrayList;

public class Test {
    public static int listTest(ArrayList<Integer> al, Integer s){
        for (int i = 0;i<=al.size();i++){
            if (al.get(i) == s){

                return i;
            }
        }
        return -1;
    }
    public static void main(String[] args) {
        ArrayList<Integer> al = new ArrayList<>();
        al.add(1);
        al.add(10);
        al.add(8);

        int s = 8;

        int index = listTest(al,s);
        System.out.println("第一次出现的位置是" + index);
    }
}

作业二

2.已知数组存放一批QQ号码,QQ号码最长为11位,最短为5位String[] strs =

{"12345","67891","12347809933","98765432102","67891","12347809933"}。

将该数组里面的所有qq号都存放在LinkedList中,将list中重复元素删除,将list中所有元素分别用迭代器和增强for循环打印出来

package homework02;

import java.util.LinkedList;

public class Test {
    public static void main(String[] args) {
        String[] strs = {"12345","67891","12347809933","98765432102","67891","12347809933"};
        LinkedList<String> l = new LinkedList<>();

        for (String s : strs){
            if (l.contains(s)){
                continue;
            }else{
                l.add(s);
            }
        }
        for (String s1 : l){
            System.out.println(s1);
        }
    }
}

作业三

用Comparable接口对下列四位同学的成绩做降序排序,

如果成绩一样,那在成绩排序的基础上按照年龄由小到大排序

姓名(String)年龄(int)分数(float)

liusan 25 90.0F

lisi 21 90.0F

wangwu 20 99.0F

sunliu 22 100.0F

Test

package homework03;

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

import static java.util.Collections.sort;

public class Test {
    public static void main(String[] args) {
        Student[] students = {
                new Student("liusan", 25, 90.0),
                new Student("lisi", 21, 90.0),
                new Student("wangwu", 20, 99.0),
                new Student("sunliu", 22, 100.0)
        };

        Arrays.sort(students);

        for (Student student : students){
            System.out.println(student.toString());
        }

    }
}

Student

package homework03;

import java.util.ArrayList;

public class Student implements Comparable<Student>{
    private String name;
    private double scorce;
    private int age;

    public Student(String name,  int age,double scorce) {
        this.name = name;
        this.scorce = scorce;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public double getScorce() {
        return scorce;
    }

    public void setScorce(double scorce) {
        this.scorce = scorce;
    }

    public int getAge() {
        return age;
    }

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

    @Override
    public int compareTo(Student o) {
        if(this.scorce==o.scorce){
            if (this.age<o.age){
                return -1;
            }else {
                return 0;
            }
        }else{
            if (this.scorce<o.scorce){
                return -1;
            }else{
                return 0;
            }
        }
    }

    @Override
    public String toString() {
        return "姓名:" + this.name + ",年龄:" + this.age + ",分数:" + this.scorce;
    }
}

作业四

4.现在有一个map集合如下:

Map<Integer,String> map = new HashMap<Integer, String>();

map.put(1, "张三丰");

map.put(2, "周芷若");

map.put(3, "汪峰");

map.put(4, "灭绝师太");

要求:

(1)遍历集合,并将序号与对应人名打印。

(2)向该map集合中插入一个编码为5姓名为李晓红的信息

3.移除该map中的编号为1的信息

4.将map集合中编号为2的姓名信息修改为"周林"

package homework04;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class Test {
    public static void main(String[] args) {
        Map<Integer,String> map = new HashMap<Integer, String>();
        map.put(1, "张三丰");
        map.put(2, "周芷若");
        map.put(3, "汪峰");
        map.put(4, "灭绝师太");

        Set key = map.keySet();
    //遍历
        for (Object s : key){
            System.out.println("" + map.get(s));
        }

        //插入
        map.put(5,"李晓红");
        //删除编号为1的信息
        map.remove(1);
        //修改编号为2的信息
        map.put(2,"周琳");

        for (Object s : key){
            System.out.println("" + map.get(s));
        }

    }
}
  • 31
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值