【Java基础】案例代码3

三、面向对象

(一)类和对象

1.学生对象-练习

需求:首先定义一个学生类,然后定义一个学生测试类, 在学生测试类中通过对象完成成员变量和成员方法的使用

/*
    学生类
 */
public class Student {
    //成员变量
    String name;
    int age;

    //成员方法
    public void study(){
        System.out.println("好好学习,天天向上");
    }
    public void doHomework(){
        System.out.println("键盘敲烂,月薪百万");
    }
}
/*
   学生测试类
 */
public class StudentDemo {
    public static void main(String[] args) {
        //创建对象
        Student s = new Student();
        //使用对象
        System.out.println(s.name + "," + s.age);

        s.name = "林青霞";
        s.age = 30;

        System.out.println(s.name + "," + s.age);

        s.study();
        s.doHomework();
    }
}

2.private的使用

get/set方法

/*
    学生类
 */
public class Student {
    //成员变量
    private String name;//默认为public(string name;)
    private int age;

    //get/set方法
    public void setName(String n) {  //设置成员变量的值 void,String n
        name = n;
    }

    public String getName() {  //获取成员变量的值 String,无参
        return name;
    }

    public void setAge(int a) {
        if (a < 0 || a > 120) {      //可以在set方法中设置获取范围
            System.out.println("你给的年龄有误");
        } else {
            age = a;
        }
    }

    public int getAge() {
        return age;
    }

    public void show() {//不用传参!!!
        System.out.println(name + "," + age);
    }

}
/*
    学生测试类
*/
public class StudentDemo {
    public static void main(String[] args) {
        //创建对象
        Student s = new Student();

        //使用set方法给成员变量赋值
        s.setName("林青霞");
        s.setAge(30);

        s.show();

        //使用get方法获取成员变量的值
        System.out.println(s.getName() + "," + s.getAge());
        System.out.println(s.getName() + "," + s.getAge());
    }
}

3.标准类制作

①成员变量
使用private修饰
②构造方法
提供一个无参构造方法
提供-个带多个参数的构造方法
③成员方法
提供每一个成员变量对应的setXxx()/getXxx()
提供一个显示对象信 息的show()
④创建对象并为其成员变量赋值的两种方式
无参构造方法创建对象后使用setXx()赋值
使用带参构造方法直接创建带有属性值的对象
 

/*
    学生类
*/
public class Student {
    //成员变量
    private String name;
    private int age;

    //构造方法
    public Student() {  //无参构造

    }

    public Student(String name, int age) {  //带多个参数的构造方法
        this.name = name;
        this.age = age;
    }

    //成员方法
    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

    public void show() {
        System.out.println(name + "," + age);
    }

}
/*
    学生测试类
 */
public class StudentDemo {
    public static void main(String[] args) {
        //无参构造方法创建对象后使用setXx()赋值
        Student s1 = new Student();
        s1.setName("林青霞");
        s1.setAge(30);
        s1.show();

        //使用带参构造方法直接创建带有属性值的对象
        Student s2 = new Student("林青霞", 30);
        s2.show();
    }
}

(二)API

1.用户登录

需求:已知用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示

import java.util.Scanner;

public class Login {
    public static void main(String[] args) {
        String username = "waxy";
        String password = "mima";

        Scanner sc = new Scanner(System.in); //输入

        for (int i = 0; i < 3; i++) {  //循环
            System.out.println("请输入用户名:");
            String name = sc.nextLine();

            System.out.println("请输入密码:");
            String pwd = sc.nextLine();

            if (name.equals(username) && pwd.equals(password)) { //字符串对比为equals(),字符串用==比较的是地址的值
                System.out.println("登录成功");
                break;
            } else if (2 - i == 0) {
                System.out.println("你的账户被锁定,请与管理员联系");
            } else {
                System.out.println("登陆失败,你还有" + (2 - i)+ "次机会");  //用i来倒数
            }
        }

    }
}

2.遍历字符串

import java.util.Scanner;

public class Index {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入一个字符串:" );
        String line = sc.nextLine();

        for (int i = 0; i < line.length(); i++) {  //获取字符串长度 length(); array获取长度为length;
            System.out.print(line.charAt(i)); //charAt(int index); 返回指定索引处的char值,字符串的索引也是从0开始的
        }
    }

}

3.统计字符串次数

需求:键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数(不考虑其他字符

import java.util.Scanner;

public class Count {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入字符串:");
        String line = sc.nextLine();

        //定义三个统计变量,初始值都为0
        int bigCount = 0;
        int smallCount = 0;
        int numberCount = 0;

        for (int i = 0; i < line.length(); i++) {
            char ch = line.charAt(i);

            if (ch >= 'A' && ch <= 'Z') {
                bigCount++;
            } else if (ch >= 'a' && ch <= 'z') {
                smallCount++;
            } else if (ch >= '0' && ch <= '9') {
                numberCount++;
            }
        }

        System.out.println("大写字母:" + bigCount + "个");
        System.out.println("小写字母:" + smallCount + "个");
        System.out.println("数字" + numberCount + "个");
    }
}

4.拼接字符串

需求:定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,
并在控制台输出结果。例如,数组为int[] arr= {1,2,3};,执行方法后的输出结果为: [1,2, 3]

public class ArrayToString {
    public static void main(String[] args) {
        //定义一个数组,静态初始化
        int[] arr = {1, 2, 3};
        //调用方法,用一个变量接收结果
        String s = arrayToString(arr);
        System.out.println(s);
    }

    public static String arrayToString(int[] arr) {
        //初始化一个字符串
        String s = "";
        s += "[";
        for (int i = 0; i < arr.length; i++) {
            if(i == arr.length-1){
                s += arr[i];;
            }else{
                s += arr[i];
                s += ", ";
            }
        }
        s += "]";

        return s;
    }
}

5.字符串反转

需求:定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果例如,键盘录入abc,输出结果cba

import java.util.Scanner;

public class Reverse {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String line = sc.nextLine();

        String s = reverse(line);
        System.out.println(s);
    }
    public static String reverse(String l){
        String l1 = "";

        for (int i = l.length()-1; i >= 0; i--) {  //注意反向的for怎么写
            l1 += l.charAt(i);  //注意不是l[i]
        }

        return l1;
    }
}

6.字符串拼接升级版

public class ArrayToString1 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        String s = arrayToString(arr);
        System.out.println(s);
    }

    public static String arrayToString(int[] arr) {
        //StringBuilder
        StringBuilder sb = new StringBuilder();

        sb.append("["); //append方法拼接

        for (int i = 0; i < arr.length; i++) {
            if(i == arr.length-1){
                sb.append(arr[i]);
            }else{
                sb.append(arr[i]);
                sb.append(", ");
            }
        }
        sb.append("]");

        String s = sb.toString();//转化为string类型

        return s;
    }
}

7.字符串反转升级版

import java.util.Scanner;

public class Reverse1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String line = sc.nextLine();

        String s = myreverse(line);
        System.out.println(s);
    }
    public static String myreverse(String s){
        //法一
//        StringBuilder sb = new StringBuilder(s);//由string转为StringBuilder
//        sb.reverse();
//        String ss = sb.toString();//转化为String
//        return ss;

        //法二
        return new StringBuilder(s).reverse().toString();

    }

(三)ArrayList

1.存储学生对象并遍历

需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合   

public class Student {
    private String name;
    private int age;

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

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

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

    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }
}
import java.util.ArrayList;

public class Arraylist {
    public static void main(String[] args) {
        //创建集合对象
        ArrayList<Student> array = new ArrayList<Student>();
        //创建学生对象
        Student s1 = new Student("林青霞",30);
        Student s2 = new Student("风清扬",33);
        Student s3 = new Student("张曼玉",18);
        //添加学生对象到集合中
        array.add(s1);
        array.add(s2);
        array.add(s3);
        //遍历
        for (int i = 0; i < array.size() ; i++) {  //区别array.length(数组),此为集合
            Student s = array.get(i);//集合获取元素
            System.out.println(s.getName()+","+s.getAge());
        }
    }
}

2.存储学生对象并遍历升级版

需求:创建一个存储学生对象的集合,存储3个学生对象,使用程序实现在控制台遍历该集合
学生的姓名和年龄来自于键盘录入
 

public class Student1 {
    //为了键盘录入方便,把学生类的成员变量都定义为String类型
    private String name;
    private String age;

    public Student1(){}//构造函数没有返回值void、int等类型
    public Student1(String name,String age){
        this.name = name;
        this.age = age;
    }

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

    public String getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }
}
import java.util.ArrayList;
import java.util.Scanner;

public class ArrayList1 {
    public static void main(String[] args) {

        ArrayList<Student1> array = new ArrayList<Student1>();

        addStudent(array);
        addStudent(array);
        addStudent(array);

        for (int i = 0; i < array.size(); i++) {
            Student1 s = array.get(i);//集合获取元素
            System.out.println(s.getName() + "," + s.getAge());
        }

    }

    //为了提高代码的复用性。用方法来改进程序
    public static void addStudent(ArrayList<Student1> array) {
        //从键盘录入对象
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入学生姓名:");
        String name = sc.nextLine();
        System.out.println("请输入学生年龄:");
        String age = sc.nextLine();

        //创建学生类赋值成员变量
        Student1 s = new Student1();
        s.setName(name);
        s.setAge(age);

        //往集合种添加对象
        array.add(s);
    }
}

3.学生管理系统

public class Student {
    private String sid;
    private String name;
    private String age;
    private String address;

    public Student(){}
    public Student(String sid,String name,String age,String address){
        this.sid = sid;
        this.name = name;
        this.age = age;
        this.address = address;
    }

    public String getSid() {
        return sid;
    }

    public void setSid(String sid) {
        this.sid = sid;
    }

    public String getName() {
        return name;
    }

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

    public String getAge() {
        return age;
    }

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

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}
import java.util.ArrayList;
import java.util.Scanner;

public class StudentManager {
    public static void main(String[] args) {
        //创建集合对象,用于存储数据
        ArrayList<Student> array = new ArrayList<Student>();

        //用循环完成再次回到主界面
        while (true) {
            System.out.println("--------欢迎来到学生管理系统--------");
            System.out.println("1 添加学生");
            System.out.println("2 删除学生");
            System.out.println("3 修改学生");
            System.out.println("4 查看所有学生");
            System.out.println("5 退出");
            System.out.println("请输入您的选择:");

            //用scanner实现键盘录入
            Scanner sc = new Scanner(System.in);
            String line = sc.nextLine();

            //用switch语句完成操作的选择
            switch (line) {
                case "1":
                    System.out.println("添加学生");
                    addStudent(array);
                    break;
                case "2":
                    System.out.println("删除学生");
                    deleteStudent(array);
                    break;
                case "3":
                    System.out.println("修改学生");
                    updateStudent(array);
                    break;
                case "4":
                    System.out.println("查看所有学生");
                    findAllStudent(array);
                    break;
                case "5":
                    System.out.println("谢谢使用!");
                    System.exit(0);//JVM退出(java虚拟机)
            }
        }
    }

    //判断学号是否被占用
    public static boolean inUsed(ArrayList<Student> array, String sid) {
        boolean flag = false;

        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);
            if (s.getSid().equals(sid)) {
                flag = true;
                break;
            }
        }
        return flag;
    }

    //添加学生
    public static void addStudent(ArrayList<Student> array) {  //参数为arraylist集合
        Scanner sc = new Scanner(System.in);

        //为了让sid在while循环外边被访问到,定义在循环外
        String sid;
        //为了让程序能回到这里,使用循环实现
        while (true) {
            System.out.println("请输入学生学号:");
            sid = sc.nextLine();  //这里已经定义过,不用String

            //调用判断是否重复
            boolean flag = inUsed(array, sid);
            if (flag) {
                System.out.println("你输入的学号已经使用,请重新输入");
            } else {
                break;
            }
        }

        System.out.println("请输入学生姓名:");
        String name = sc.nextLine();
        System.out.println("请输入学生年龄:");
        String age = sc.nextLine();
        System.out.println("请输入学生居住地:");
        String address = sc.nextLine();

        //创建学生对象
        Student s = new Student();
        //把键盘录入信息赋值给成员变量
        s.setSid(sid);
        s.setName(name);
        s.setAge(age);
        s.setAddress(address);

        //往集合种添加对象
        array.add(s);

        System.out.println("添加学生成功!");
    }


    //查看学生
    public static void findAllStudent(ArrayList<Student> array) {
        //判断集合中是否有数据
        if (array.size() == 0) {
            System.out.println("无信息,请先添加信息再查询");
            return;//为了不让程序再往下执行,return;
        }

        //显示表头信息
        // \t 其实就是tab键的位置
        System.out.println("学号\t\t\t姓名\t\t年龄\t\t居住地");

        //将集合中数据取出,按照对应格式显示学生信息,年龄显示补充”岁“
        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);//从集合中取出,先从集合中取,才能用类中的getName等方法
            System.out.println(s.getSid() + "\t" + s.getName() + "\t" + s.getAge() + "岁\t" + s.getAddress());
        }
    }

    //删除学生
    public static void deleteStudent(ArrayList<Student> array) {
        int index = -1; //记录位置

        //键盘录入要删除的学生学号,显示提示信息
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要删除的学生学号:");
        String sid = sc.nextLine();

        //遍历集合如有相同信息便记录索引位置
        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);
            if (s.getSid().equals(sid)) { //字符串要用equals
                index = i;//索引位置改变
                break;
            }
        }
        //判断信息是否存在,并删除
        if (index == -1) {
            System.out.println("该信息不存在,请重新输入");
        } else {
            array.remove(index);
            System.out.println("删除学生成功!");
        }
    }

    //修改学生
    public static void updateStudent(ArrayList<Student> array) {
        //键盘录入要删除的学生学号,显示提示信息
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要修改的学生学号:");
        String sid = sc.nextLine();

        //键盘录入要修改的学生信息,只能一个信息一个信息的录入
        System.out.println("请输入学生新姓名:");
        String name = sc.nextLine();
        System.out.println("请输入学生新年龄:");
        String age = sc.nextLine();
        System.out.println("请输入学生新居住地:");
        String address = sc.nextLine();

        //创建学生对象
        Student s1 = new Student();
        s1.setSid(sid);//用set录入新对象的信息
        s1.setName(name);
        s1.setAge(age);
        s1.setAddress(address);

        int index = -1; //记录位置
        //遍历集合修改对应的学生信息
        for (int i = 0; i < array.size(); i++) {
            Student s = array.get(i);
            if (s.getSid().equals(sid)) {
                index = i;
                break;
            }
//            else {
//                System.out.println("未查询到对象");
//            }//这种方法会输出很多else
        }
        if (index == -1) {
            System.out.println("该信息不存在,请重新输入");
        } else {
            array.set(index, s1);//set方法
            System.out.println("修改学生成功!");
        }
    }
}

(四)时间日期类

1.calendar常用方法

import java.util.Calendar;

public class CalendarTest {
    public static void main(String[] args) {
        //获取日历类对象
        Calendar c = Calendar.getInstance();

        //输入日期
        //今天
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int date = c.get(Calendar.DATE);
        System.out.println(year + "年" + month + "月" + date + "日");

        //增减日期
        //三年前的今天
        c.add(Calendar.YEAR, -3);
        year = c.get(Calendar.YEAR);
        month = c.get(Calendar.MONTH);
        date = c.get(Calendar.DATE);
        System.out.println(year + "年" + month + "月" + date + "日");

        //10年后的5天前
        c.add(Calendar.YEAR, +10);
        c.add(Calendar.DATE, -5);
        year = c.get(Calendar.YEAR);
        month = c.get(Calendar.MONTH);
        date = c.get(Calendar.DATE);
        System.out.println(year + "年" + month + "月" + date + "日");

        //设置当前日期的年月日
        c.set(2048, 11, 11);
        year = c.get(Calendar.YEAR);
        month = c.get(Calendar.MONTH);
        date = c.get(Calendar.DATE);
        System.out.println(year + "年" + month + "月" + date + "日");
    }
}

2.二月天

获取任意一年的二月有多少天

import java.util.Calendar;
import java.util.Scanner;

public class February {
    public static void main(String[] args) {
        //键盘输入年份
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入年份:");
        int year = sc.nextInt(); //year应该是int,输入也为nextint

        //设置日历对象的年月日
        Calendar c = Calendar.getInstance();
        c.set(year,2,1); //月份是从0开始数的

        //三月一日往前推一天就是二月最后一天
        c.add(Calendar.DATE,-1);

        //输出
        int date = c.get(Calendar.DATE);

        System.out.println(year+"年的二月有"+date+"天");
    }
}

后续内容请见下一章。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值