【JAVA】JAVA入门(长期维护)(2)

简介: 【JAVA】JAVA入门(长期维护)(2)

9.常用API

①导包

API:全程应用程序编程接口,是别人写好的一些代码,方便程序员直接拿去调用以提高开发效率。

包:包是分门别类管理程序的,别人写好的程序通常都放在对应的包种进行管理和维护。

建包的语法格式:

自动导包

包的注意事项:

package a;
import b.Teacher;
import java.util.Random;
import java.util.Scanner;
public class test_a {
    public static void main(String[] args) {
        //导包的注意事项
        // 1.同一个包下的类,可以直接互相调用
        Student s1 = new Student();
        s1.printStudent();
        // 2.不同包下,需要导入包,import+包名.类名
        Teacher t1 = new Teacher();
        //3.要调用java提供的程序,需要先导包才可以使用,但是java.lang中的包可以直接使用
        Scanner s2 = new Scanner(System.in);
        Random r1 = new Random();
        //4.当前程序中如果要调用多个不同包下的程序且这些程序类名一致,此时默认值只能导入一个,另一个需要输入全称。
        Teacher t = new Teacher();
        t.printTeacher();
        a.Teacher t2 = new a.Teacher();
        t2.printTeacher();
    }
}
• 1

②字符串(String)

拓展练习题:

package page_2024_4_9;
public class class_2024_4_9 {
    public static void main(String[] args) {
        //题目1:下面两个代码分别创建几个对象?
        String s2 = new String("abc");//这个abc是先放在常量池中,再拿到堆中的,创建两个对象
        String s1 = "abc";//这个abc是放在常量池中的,但是前面已经创建了,所以只创建一个对象
        System.out.println("-------------");
        System.out.println(s2 == s1);
        System.out.println("-------------");
        //题目2:阅读下面程序,请写出程序的打印结果是多少?
        String b1 = "abc";
        String b2 = "ab";
        String b3 = s2 + "c";//注意,如果需要变量参与运算时候,要放在堆中进行运算
        System.out.println("-------------");
        System.out.println(b1 == b3);
        System.out.println("-------------");
        //题目3:阅读下面程序,请写出程序的打印结果是多少?
        String c1 = "abc";
        String c2 = "a" + "b" + "c";
        System.out.println("-------------");
        System.out.println(c1 == c2);
        System.out.println("-------------");
    }
}
案例1:完成用户登录

private static void test2() {
        //开发一个登录验证的逻辑
        int count = 3;
        do {
            //1.首先要接收用户输入的账号和密码
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入您的账号");
            String Account = sc.next();
            System.out.println("请输入您的密码");
            String password = sc.next();
            //2.判断账号密码是否正确的函数
            boolean check = Checkpassword(Account,password);
            if(check)
            {
                System.out.println("欢迎进入系统");
                break;
            }
            else {
                System.out.println("账号/密码有误");
            }
            count--;
        }while(count!=0);
        if(count == 0)
        System.out.println("3次机会已经用完~~");
    }
    private static boolean Checkpassword(String Account,String password) {
        //定义正确的账号与密码
        String okAccount = "suziguang";
        String okpassword = "123456";
        //返回
        return Account.equals(okAccount) && password.equals(okpassword);
    }
案例2:使用String来开发验证码

private static void test3() {
        //制造验证码
        String code = CreatCode(4);
        System.out.println(code);
    }
    private static String CreatCode(int n) {
        String code = "";
        String data = "abcdefghijklmnopqrstuvwxyzABCDEFGIJKLMNOPQRSTUVWXYZ0123456789";
        Random r = new Random();
        for (int i = 0; i < n; i++) {
            int k = r.nextInt(data.length());
            code += data.charAt(k);
        }
        return code;
    }

③集合(ArrayList)

集合的概念:集合是一种容器,类似于数组,用来储存数据。

注:集合是一种泛类型,ArrayList<>可以用来限制类型

集合的特点:长度灵活可变(相较于数组大小固定而言)

集合的种类:ArrayList、TreeSet、LinkedList…

集合提供的各种接口:

private static void test4() {
        ArrayList<String> list = new ArrayList();
        //1.add尾插,返回是否插入成功
        list.add("zhaoyun");
        list.add("zhugeliang");
        System.out.println(list);
        //2.pos插入,返回void
        list.add(1,"zhangfei");
        System.out.println(list);
        //3.get返回指定索引处的元素
        System.out.println(list.get(0));
        //4.size,返回集合中的元素个数
        System.out.println(list.size());
        //5.remove,删除指定索引处的元素,并返回该元素
        System.out.println(list.remove(0));
        System.out.println(list);
        //6.remove,删除指定元素,并返回是否成功
        System.out.println(list.remove("zhugeliang"));
        System.out.println(list);
        //7.修改指定索引处的元素,返回被修改的元素
        System.out.println(list.set(0, "zhaozilong"));
        System.out.println(list);
    }
技巧:删除集合元素的技巧

private static void PopElements() {
        ArrayList<String> list = new ArrayList();
        list.add("张飞");
        list.add("赵子龙");
        list.add("李云龙");
        list.add("龙");
        list.add("赵云");
        list.add("刘备");
        System.out.println(list);
        //方法一,删除之后i--;
        /*for (int i = 0; i < list.size(); i++) {
            String ele = list.get(i);
            if(ele.contains("龙"))
            {
                list.remove(i);
                i--;
            }
        }*/
        //方法二:从后面往前删除
        for (int j = list.size() - 1; j >= 0; j--) {
            String ele = list.get(j);
            if(ele.contains("龙"))
            {
                list.remove(j);
            }
        }
        System.out.println(list);
    }
案例:菜品上架

小技巧:在java的switch中可以中用String来做参数,防止有其他类型的元素造成直接代码崩溃。

package testpage_2024_4_10;
public class test {
    //完成菜品上架以及展示的功能
    public static void main(String[] args) {
        //1.首先要创建一个food类,就是一个空白的表格
        //2.创建一个food操作方法类,用来对集合进行操作
        FoodOperation op = new FoodOperation();
        op.start();
    }
}
package testpage_2024_4_10;
import java.util.ArrayList;
import java.util.Scanner;
public class FoodOperation {
    private ArrayList<Food> FoodList = new ArrayList<>();
    //1.add功能
    public void add()
    {
        Food food = new Food();
        Scanner sc = new Scanner(System.in);
        //1.输入
        System.out.println("请输入您要添加的菜品名称");
        String name = sc.next();
        food.setName(name);
        System.out.println("请输入您要添加的菜品价格");
        String price = sc.next();
        food.setPrice(price);
        System.out.println("请输入您要添加的菜品描述");
        String desc = sc.next();
        food.setDesc(desc);
        FoodList.add(food);
        System.out.println("菜品上架成功!");
    }
    //2.展示功能
    public void show(){
        if(FoodList == null)
        {
            System.out.println("没有商品");
            return;
        }
        Food food = new Food();
        System.out.println("------------------------");
        for(int i = 0;i<FoodList.size();i++)
        {
            food = FoodList.get(i);
            System.out.println("商品的名称:" + food.getName());
            System.out.println("商品的价格:" + food.getPrice());
            System.out.println("商品的描述:" + food.getDesc());
            System.out.println("------------------------");
        }
    }
    public void start(){
        Scanner sc = new Scanner(System.in);
        String commend = new String();
        do {
            System.out.println("1.add");
            System.out.println("2.showall");
            System.out.println("0.exit");
            System.out.println("请输入选项");
            commend = sc.next();
            switch(commend)
            {
                case "1":
                    add();
                    break;
                case "2":
                    show();
                    break;
                case "0":
                    break;
                default:
                    System.out.println("没有该选项,重新选择");
            }
        }while(!commend.equals("0"));
    }
}
package testpage_2024_4_10;
public class Food {
    private String name;
    private String price;
    private String desc;
    public Food(String name, String price, String desc) {
        this.name = name;
        this.price = price;
        this.desc = desc;
    }
    public Food() {
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPrice() {
        return price;
    }
    public void setPrice(String price) {
        this.price = price;
    }
    public String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
}

10.ATM项目实践

package page_ATM;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class ATM {
   private ArrayList<Account> accounts = new ArrayList<Account>();
   Scanner sc = new Scanner(System.in);
   Random r = new Random();
   public void start(){
       String commend = "0";
       do {
           System.out.println("欢迎进入ATM系统");
           menu();
           System.out.println("请输入您要选择的选项");
           commend = sc.next();
           switch(commend)
           {
               case "1":
                   System.out.println("用户登录");
                   System.out.println();
                   login();
                   break;
               case "2":
                   System.out.println("用户开户");
                   System.out.println();
                   addAccount();
                   break;
               case "0":
                   System.out.println("ATM退出成功!");
                   System.out.println();
                   break;
               default:
                   System.out.println("没有该选项,重新选择");
                   System.out.println();
                   break;
           }
       }while(!commend.equals("0"));
   }
    private void login() {
       if(accounts.size() == 0)
       {
           System.out.println("当前ATM中无任何账号,请先去开户");
           return;
       }
        Account acc = new Account();
        while(true)
        {
            System.out.println("请您输入卡号");
            String st = sc.next();
            //检查是否有该卡号
            acc = CheckID(st);
            if(acc!=null)
            {
                System.out.println("当前ATM系统中存在该账号,请继续输入密码");
                break;
            }
            else {
                System.out.println("当前ATM系统中不存在该账号,请重新输入");
            }
        }
        while(true)
        {
            String password = sc.next();
            if(password.equals(acc.getPassword()))
            {
                System.out.println("密码输入正确," + acc.getName() + "您已成功登录系统中");
                UserMenu(acc);
                return;
            }
            else {
                System.out.println("密码输入错误,请重新输入密码");
            }
        }
    }
    private void UserMenu(Account acc) {
       while(true)
       {
           System.out.println(acc.getName() + "您可以选择如下选项对该账号进行操作:");
           Menu();
           int commend = sc.nextInt();
           switch(commend)
           {
               case 1:
                   //查询账号
                   CheckThisID(acc);
                   break;
               case 2:
                   //存款
                   addmoney(acc);
                   break;
               case 3:
                   //取款
                   drawmoney(acc);
                   break;
               case 4:
                   //转账
                   transfermoney(acc);
                   break;
               case 5:
                   //修改密码
                   break;
               case 6:
                   //退出
                   return;
               case 7:
                   //注销账户
                   break;
               default:
                   //其他情况
                   System.out.println("您输入的命令不合法,请重新输入");
                   break;
           }
       }
   }
    private void transfermoney(Account acc) {
       //首先得判断系统中的账号是否大于等于2
        if(accounts.size() < 2)
        {
            System.out.println("当前系统中仅一个账号,请先去开户~~");
            return;
        }
        //在判断一下自己账号是否有钱
        if(acc.getMoney()==0)
        {
            System.out.println("您的账号余额不足,请先存钱");
            return;
        }
        //到这里,再开始接收用户的卡号
        while(true)
        {
            System.out.println("请输入您要转账的卡号");
            String id = sc.next();
            Account acc2 = CheckID(id);
            if(acc2 == null)
            {
                System.out.println("抱歉,在系统中没有找到该账号");
            }
            else {
                while(true)
                {
                    System.out.println("为了安全考量,请输入转账人的姓氏");
                    String name = "*" + acc2.getName().substring(1);
                    System.out.println("提示:[" + name + "]");
                    String surname = sc.next();
                    if(acc2.getName().startsWith(surname))
                    {
                        System.out.println("认证成功");
                        //下面开始真正转钱了
                        while(true)
                        {
                            System.out.println("请输入您要转钱的金额");
                            double money = sc.nextDouble();
                            if(money>acc.getMoney())
                            {
                                System.out.println("您的金额不足,您当前可转的最大金额是" + acc.getMoney() + "请您重新输入");
                            }
                            else {
                                System.out.println("转钱中,请稍等");
                                acc.setMoney(acc.getMoney() - money);
                                acc2.setMoney(acc2.getMoney() + money);
                                System.out.println("您的账号余额为" + acc.getMoney() + "对方的余额为" + acc2.getMoney());
                                System.out.println("转钱成功,跳转到个人账户菜单");
                                return;
                            }
                        }
                    }
                    else {
                        System.out.println("您的转账姓氏认证有问题,请重新输入");
                    }
                }
            }
        }
    }
    private void drawmoney(Account acc) {
        if(acc.getMoney()<100)
        {
           System.out.println("当前您的账号金额为" + acc.getMoney() + "满100元之后方可取款");
        }
        System.out.println("请输入您要取钱的金额");
        double money = sc.nextDouble();
        if(money>acc.getMoney())
        {
            System.out.println("当前账号余额不足,请重新输入金额");
        }
        else {
            if(money>acc.getLimit())
            {
                System.out.println("超过当前账号的单次取款限额,请重新输入金额");
            }
            acc.setMoney(acc.getMoney() - money);
            System.out.println(acc.getName() + "您当前账号的余额为" + acc.getMoney());
        }
    }
    private void addmoney(Account acc) {
        System.out.println("请输入您要存入多少钱");
        double money = sc.nextDouble();
        acc.setMoney(acc.getMoney()+money);
        System.out.println(acc.getName() + "您的存钱成功,存入后的金额是" + acc.getMoney());
    }
    private void CheckThisID(Account acc) {
        System.out.println(acc.getName() + "下面是您该账号下的所有信息:");
        System.out.println("账号ID:" + acc.getID());
        System.out.println("姓名" + acc.getName());
        System.out.println("性别" + acc.getSex());
        System.out.println("限额" + acc.getLimit());
        System.out.println("存款" + acc.getMoney());
    }
    private void Menu() {
        System.out.println("1.查询账号");
        System.out.println("2.存款");
        System.out.println("3.取款");
        System.out.println("4.转账");
        System.out.println("5.修改密码");
        System.out.println("6.退出");
        System.out.println("7.注销账户");
        System.out.println("请选择:");
    }
    private void menu() {
        System.out.println("---------------");
        System.out.println("1.用户登录");
        System.out.println("2.用户开户");
        System.out.println("0.退出ATM系统");
        System.out.println("---------------");
    }
    private void addAccount()
    {
        Account acc = new Account();
        System.out.println("请输入您的姓名");
        String name = sc.next();
        acc.setName(name);
        while(true)
        {
            System.out.println("请输入您的性别");
            String sex = sc.next();
            if(sex.equals("男") || sex.equals("女"))
            {
                acc.setSex(sex);
                break;
            }
            else {
                System.out.println("您输入的性别有误,请输入男/女");
            }
        }
        while(true)
        {
            System.out.println("请输入您的密码");
            String password = sc.next();
            System.out.println("请再次输入您的密码作确认");
            String okpassword = sc.next();
            if(password.equals(okpassword))
            {
                acc.setPassword(password);
                break;
            }
            else
            {
                System.out.println("您输入的两次密码不一致,请重新输入");
            }
        }
        while(true)
        {
            System.out.println("请输入您每次的取现额度");
            double limit = sc.nextDouble();
            if(limit > 0)
            {
                acc.setLimit(limit);
                break;
            }
            else{
                System.out.println("您输入的limit限制<=0,请重新输入");
            }
        }
        //系统自动生成卡号
        String id = CreatID(8);
        acc.setID(id);
        //最后把acc这一个账号扔到集合中进行管理
        System.out.println(acc.getName() + "开户成功,您的卡号是" + id);
        accounts.add(acc);
    }
    private String CreatID(int n) {
       while(true)
       {
           String id = "";
           for (int i = 0; i < n; i++) {
               id += r.nextInt(10);
           }
           Account acc = CheckID(id);
           if(acc == null)
           {
               return id;
           }
       }
    }
    private Account CheckID(String id) {
        for (int i = 0; i < accounts.size(); i++) {
            if(id.equals(accounts.get(i).getID()))
            {
                return accounts.get(i);
            }
        }
        return null;
    }
}
package page_ATM;
public class Test {
    public static void main(String[] args) {
        //首先完成ATM类的变量和start功能设计
        ATM atm = new ATM();
        atm.start();
    }
}
package page_ATM;
public class Account {
    private String ID;
    private String name;
    private String sex;
    private String password;
    private double money;
    private double limit;
    public Account() {
    }
    public Account(String ID, String name, String sex, String password, double money, double limit) {
        this.ID = ID;
        this.name = name;
        this.sex = sex;
        this.password = password;
        this.money = money;
        this.limit = limit;
    }
    public String getID() {
        return ID;
    }
    public void setID(String ID) {
        this.ID = ID;
    }
    public String getName() {
        return name + (sex.equals("男") ? "先生" : "女士");
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public double getMoney() {
        return money;
    }
    public void setMoney(double money) {
        this.money = money;
    }
    public double getLimit() {
        return limit;
    }
    public void setLimit(double limit) {
        this.limit = limit;
    }
}

EOF

相关文章
|
10天前
|
存储 Oracle Java
java零基础学习者入门课程
本课程为Java零基础入门教程,涵盖环境搭建、变量、运算符、条件循环、数组及面向对象基础,每讲配示例代码与实践建议,助你循序渐进掌握核心知识,轻松迈入Java编程世界。
87 0
|
2月前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
283 0
|
3月前
|
安全 Java 数据库连接
2025 年最新 Java 学习路线图含实操指南助你高效入门 Java 编程掌握核心技能
2025年最新Java学习路线图,涵盖基础环境搭建、核心特性(如密封类、虚拟线程)、模块化开发、响应式编程、主流框架(Spring Boot 3、Spring Security 6)、数据库操作(JPA + Hibernate 6)及微服务实战,助你掌握企业级开发技能。
420 3
|
5月前
|
Java API 微服务
2025 年 Java 从入门到精通学习笔记全新版
《Java学习笔记:从入门到精通(2025更新版)》是一本全面覆盖Java开发核心技能的指南,适合零基础到高级开发者。内容包括Java基础(如开发环境配置、核心语法增强)、面向对象编程(密封类、接口增强)、进阶技术(虚拟线程、结构化并发、向量API)、实用类库与框架(HTTP客户端、Spring Boot)、微服务与云原生(容器化、Kubernetes)、响应式编程(Reactor、WebFlux)、函数式编程(Stream API)、测试技术(JUnit 5、Mockito)、数据持久化(JPA、R2DBC)以及实战项目(Todo应用)。
277 5
|
2月前
|
前端开发 Java 数据库连接
帮助新手快速上手的 JAVA 学习路线最详细版涵盖从入门到进阶的 JAVA 学习路线
本Java学习路线涵盖从基础语法、面向对象、异常处理到高级框架、微服务、JVM调优等内容,适合新手入门到进阶,助力掌握企业级开发技能,快速成为合格Java开发者。
369 3
|
3月前
|
NoSQL Java 关系型数据库
Java 从入门到进阶完整学习路线图规划与实战开发最佳实践指南
本文为Java开发者提供从入门到进阶的完整学习路线图,涵盖基础语法、面向对象、数据结构与算法、并发编程、JVM调优、主流框架(如Spring Boot)、数据库操作(MySQL、Redis)、微服务架构及云原生开发等内容,并结合实战案例与最佳实践,助力高效掌握Java核心技术。
306 1
|
3月前
|
Java 测试技术 API
Java IO流(二):文件操作与NIO入门
本文详解Java NIO与传统IO的区别与优势,涵盖Path、Files类、Channel、Buffer、Selector等核心概念,深入讲解文件操作、目录遍历、NIO实战及性能优化技巧,适合处理大文件与高并发场景,助力高效IO编程与面试准备。
|
3月前
|
Java 编译器 API
Java Lambda表达式与函数式编程入门
Lambda表达式是Java 8引入的重要特性,简化了函数式编程的实现方式。它通过简洁的语法替代传统的匿名内部类,使代码更清晰、易读。本文深入讲解Lambda表达式的基本语法、函数式接口、方法引用等核心概念,并结合集合操作、线程处理、事件回调等实战案例,帮助开发者掌握现代Java编程技巧。同时,还解析了面试中高频出现的相关问题,助你深入理解其原理与应用场景。
|
2月前
|
Java API 数据库
2025 年最新 Java 实操学习路线,从入门到高级应用详细指南
2025年Java最新实操学习路线,涵盖从环境搭建到微服务、容器化部署的全流程实战内容,助你掌握Java 21核心特性、Spring Boot 3.2开发、云原生与微服务架构,提升企业级项目开发能力,适合从入门到高级应用的学习需求。
477 0
|
3月前
|
前端开发 Java 数据库
Java 项目实战从入门到精通 :Java Web 在线商城项目开发指南
本文介绍了一个基于Java Web的在线商城项目,涵盖技术方案与应用实例。项目采用Spring、Spring MVC和MyBatis框架,结合MySQL数据库,实现商品展示、购物车、用户注册登录等核心功能。通过Spring Boot快速搭建项目结构,使用JPA进行数据持久化,并通过Thymeleaf模板展示页面。项目结构清晰,适合Java Web初学者学习与拓展。
233 1
下一篇
开通oss服务