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

下面是java的一些入门基础知识,有需要借鉴即可。
课程:B站黑马程序员,JAVA入门上半部分LINK

一、初识JAVA

1.java概述

  • 概念:java是由sun公司研发,在2009年被oracle收购,祖师爷詹姆斯·高斯林,是一种高级编程语言
    -在这里插入图片描述
  • 特性:可移植性质
  • java体系:Java SE(核心) && Java EE(企业级开发) && Java ME
  • Java产品:JDK(Java 开发工具包),注:LTS为长期支持版

目前的长期支持版有8、11、17

2.JAVA常用指令

在这里插入图片描述

  • cls 清屏
  • cd 进入目录
  • dir 列举当前目录文件
  • :切盘

3.编写第一个java程序

文件名称全英文,首字母大写,后缀java
在这里插入图片描述

4.path环境变量

意义:用于记录程序路径,方便在命令行任意位置进行调用

便于配置java版本的程序编译环境。

5.集成开发编译器:IDEA

在这里插入图片描述

二、JAVA基本语法

1.类型转换

①初步认识java中的类型:
在这里插入图片描述

②类型转换意义:处理不同类型的变量进行运算
③分类:

  • 自动转换
    -由高类型所决定
    -自动小范围转换为大范围的类型

  • 强制转换
    -类型自己决定,不过有丢失数据的风险
    在这里插入图片描述
    在这里插入图片描述

2.运算符

+连接符/加
-
*
/
%
++
+=自带强制转换
-=自带强制转换
*=自带强制转换
/=自带强制转换
%=自带强制转换
==
!=
>=
<=
>
<
&位运算符/逻辑与
&&
|位运算符/逻辑与
||
!
^位运算符/逻辑与
?:

注:&与&&的区别在于&&会短路。

3.API

  • 导包
  • 创建一个扫描器
  • 接收用户数据

4.程序流控制

①顺序结构

②分支结构

if
switch

注:switch仅支持byte、short、int、char,后来支持枚举(JDK5)、String(JDK7)

③循环结构

while
for
do_while
continue
break;

5.数组

意义:存储同一类型的多个数据
格式分类:

  • 静态数组:type[] + name = new type[]{nums};
  • 动态数组:type[] + name = new type[length];

注意,动态数组默认值为0

在这里插入图片描述

6.方法(method)

①定义:方法(函数):一种语法结构,将一段代码封装,方便重复调用
②语法格式
在这里插入图片描述

在java中,返回类型要明确指出且接收一致。

在这里插入图片描述

④下面是一些方法案例:

public class test4_2 {

    public static void main(String[] args) {
        //1.计算1——n的和
        int sum = sumNumbers(10);
        System.out.println(sum);
        //2.判断奇偶
        String a = SelectNumbers(8);
        System.out.println(a);
    }

    public static int sumNumbers(int n)
    {
        int i = 0;
        int sum = 0;
        for(i = 1;i<=n;i++)
        {
            sum+=i;
        }
        return sum;
    }

    public static String SelectNumbers(int m)
    {
        if(m%2==0)
        {
            return "even";
        }
        else {
            return "odd";
        }
    }

}

⑤拓展知识:方法重载
一个类中,出现多个方法名称相同,但是形参列表不同的方法
区分形参列表不同:形参个数、类型、顺序(不关心名称)
意义:便于处理同一类业务,提供多种解决方案。

⑥拓展知识:参数传递机制
java的参数传递机制,一般来说,分为基本值传递(基本类型)和地址传递(引用类型)。

7.简单练习

①买飞机票

在这里插入图片描述

public static double buyTicket(int month,double money,String manner)
    {
        if(month>=5 && month<=10)
        {
            //旺季
            if(manner == "头等舱")
            {
                money*=0.9;
            }
            else {
                money*=0.85;
            }

        }
        else {
            //淡季
            if(manner == "头等舱")
            {
                money*=0.7;
            }
            else {
                money*=0.65;
            }
        }

        return money;
    }

②开发验证码

在这里插入图片描述

public static String creatCaptcha(int number)
    {
        String captcha = "";
        Random r = new Random();
        for(int i = 0;i<number;i++)
        {
            int type = r.nextInt(3);//[0,3)
            switch(type)
            {
                case 0://生成小字母
                    char ch1 = (char)(r.nextInt(26)+65);
                    captcha+=ch1;
                    break;
                case 1://生成大写字母
                    char ch2 = (char)(r.nextInt(26)+97);
                    captcha+=ch2;
                    break;
                case 2://生成数字
                    int num = r.nextInt(9);
                    captcha+=num;
                    break;
            }
        }
        return captcha;
    }

要点提示:
Random r = new Random();
char ch1 = (char)(r.nextInt(26)+65);

③评委打分

在这里插入图片描述

    public static double JudgesScore(int numbers)
    {
        int[] arr = new int[numbers];
        int max = 0;
        int min = 100;
        int average = 0;
        Scanner sc = new Scanner(System.in);
        for(int i = 0;i<numbers;i++){
            int num = sc.nextInt();
            arr[i] = num;
            if(arr[i]<min)
            {
                min = arr[i];
            }
            if(arr[i]>max)
            {
                max = arr[i];
            }
            average+=arr[i];
        }

        average-=(max+min);
        average/=(numbers-2);
        return average;
    }
}

重点提示:
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();

④数字加密

在这里插入图片描述

private static String DigitalEncryption(int number) {
        //先将数字每位数字分开,放到数组中
        int[] nums = Separate(number);

        //对每个数字+5
        for(int i = 0;i<4;i++)
        {
            nums[i]+=5;
            nums[i]%=10;
        }

        //将所有数字顺序反转
        Swap(nums,0,3);

        String str = "";
        for(int i = 0;i<4;i++)
        {
            str+=nums[i];
        }

        return str;
    }

    private static void Swap(int[] arr, int start, int end) {
        while(start<end)
        {
            int temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;
            start++;
            end--;
        }
    }

⑤数组拷贝

在这里插入图片描述

private static int[] Copyarray(int[] arr) {
        int[] arrcopy = arr;
        int i = 0;
        for(i = 0;i<arrcopy.length;i++)
        {
            System.out.print(arrcopy[i] + " ");
        }
        System.out.println();
        return arrcopy;
    }

⑥抢红包

在这里插入图片描述

private static void GrabREnvelope() {
        Scanner sc = new Scanner(System.in);
        Random r = new Random();
        int[] arr = new int[]{9,666,188,520,99999};
        int j = 0;
        for(j = 0;j<5;j++)
        {
            System.out.println("请您输入一个数值进行抽奖");
            sc.nextInt();
            while(true)
            {
                //随机值
                int i = r.nextInt(5);
                if(arr[i]!=0)
                {
                    System.out.println("恭喜您抽到了" + arr[i] + "元");
                    arr[i] = 0;
                    break;
                }
                else {
                    continue;
                }
            }
            }

        System.out.println("抽奖结束,敬请待续");
    }

⑦找素数

在这里插入图片描述


    private static int findPrime1(int start, int end) {
        int i;
        int count = 0;
        int flag = 0;
        for(i = start;i<=end;i++)
        {
            flag = 0;
            int q = 2;
            for(q=2;q<=i/2;q++)
            {
                if(i%q==0)
                {
                    flag = 1;
                    break;
                }
            }

            if(flag == 0)
            {
                System.out.println(i + "是素数");
                count++;
            }
        }

        return count;
    }

    private static int findPrime2(int start, int end) {
        int i;
        int count = 0;
        OUT:
        for(i = start;i<=end;i++)
        {
            int q = 2;
            for(q=2;q<=i/2;q++)
            {
                if(i%q==0)
                {
                    continue OUT;
                }
            }

            System.out.println(i + "是素数");
            count++;
        }

        return count;
    }

    private static int findPrime3(int start, int end) {
        int i;
        int count = 0;
      for(i = 101;i<=200;i++)
      {
         if(Check(i))
         {
             count++;
             System.out.println(i + "是素数");
         }
      }
        return count;
    }

    private static boolean Check(int data) {
        for(int i = 2;i<=data/2;i++)
        {
            if(data%i==0)
            {
                return false;
            }
        }

        return true;
    }

⑧打印乘法口诀表

private static void Multiplication() {
        int i;
        for(i = 1;i<=9;i++)
        {
            int j;
            for(j = 1;j<=i;j++)
            {
                System.out.print( j + "*" + i + "=" + (i*j) + " ");
            }
            System.out.println();
        }
    }

⑨打印三角形

 private static void Triangle(int n) {
        for(int i = 0;i<n;i++)
        {
            //先打印空格
            for(int j = 0;j<n-i-1;j++)
            {
                System.out.print(" ");
            }
            //打印形状
            for(int j = 0;j<2*i-1;j++)
            {
                System.out.print("*");
            }
            System.out.println();
        }
    }

⑩双色球

在这里插入图片描述

private static void ComparativeJudgment(int[]arr1,int[]arr2) {
        int redcount = 0;
        int bluecount = 0;
        //统计红色蒙对的个数
        for(int i = 0;i<6;i++)
        {
            for(int j = 0;j<6;j++)
            {
                if(arr1[i] == arr2[i])
                {
                    redcount++;
                    break;
                }
            }
        }
        //统计蓝色蒙对的个数
        if(arr1[6] == arr2[6])
        {
            bluecount++;
        }

        if(redcount == 6 && bluecount == 1)
        {
            System.out.println("恭喜您,中1奖了");
        }
        else if(redcount == 6 && bluecount == 0)
        {
            System.out.println("恭喜您,中2奖了");
        }
        else if(redcount == 5 && bluecount == 1)
        {
            System.out.println("恭喜您,中3奖了");
        }
        else if(redcount == 5 && bluecount == 0)
        {
            System.out.println("恭喜您,中4奖了");
        }
        else if(redcount == 4 && bluecount == 1)
        {
            System.out.println("恭喜您,中5奖了");
        }
        else if(redcount == 4 && bluecount == 0)
        {
            System.out.println("恭喜您,中6奖了");
        }
        else if(redcount == 3 && bluecount == 1)
        {
            System.out.println("恭喜您,中7奖了");
        }
        else if(redcount == 2 && bluecount == 1)
        {
            System.out.println("恭喜您,中8奖了");
        }
        else if(redcount == 1 && bluecount == 1)
        {
            System.out.println("恭喜您,中9奖了");
        }
        else if(redcount == 0 && bluecount == 1)
        {
            System.out.println("恭喜您,中10奖了");
        }

    }

    public static int[] CreLuckNumbers() {
        Random r = new Random();
        int[] arr = new int[7];
        //红色球
        for(int i = 0;i < 6;i++)
        {
            while(true)
            {
                int number = r.nextInt(33)+1;
                if(Select(number,arr))
                {
                    arr[i] = number;
                    break;
                }
            }
        }
        //蓝色球
        int number = r.nextInt(16)+1;
        arr[6] = number;

        return arr;
    }

    private static void PrintArray(int[] arr) {
        for(int i = 0;i< arr.length;i++)
        {
            System.out.print(arr[i]+ " ");
        }
        System.out.println();
    }

    public static int[] UserNumbers() {
        Scanner sc = new Scanner(System.in);
        int[] numbers = new int[7];
        int i = 1;
        //红球
        for(i = 0;i<6;i++)
        {
            while(true)
            {
            System.out.println("请输入您要选择的第" + (i+1) + "个双色球号码");
            int number = sc.nextInt();
            //判断是否在范围内&&是否重复
            if(number>=1&&number<=33&&Select(number,numbers))
            {
                numbers[i] = number;
                break;
            }
            System.out.println("您选择的号码重复/不在范围中,请重新选择第" + (i+1) + "个号码");
            }
        }
        //蓝色球
        while(true)
        {
            System.out.println("请输入您要选择的蓝球号码是哪个(1-16):");
            int number = sc.nextInt();
            if(number>=1&&number<=16)
            {
                numbers[6] = number;
                break;
            }
            System.out.println("您选择的号码重复了/不再范围中,请重新选择第红球号码");
        }

        return numbers;
    }

    private static boolean Select(int number,int[] numbers) {
        int i = 0;
        for(i = 0;i<6;i++)
        {
            if(number == numbers[i])
            {
                return false;//重复的直接返回false
            }
        }

        return true;
    }

8.面向对象编程

①快速入门

在这里插入图片描述

  • 1.为什么设计类?
    符合人类的编程习惯,思维习惯。

  • 2.类的本质:
    实际上是一种特殊的数据结构,这种数据结构是一种待填的表格模板。
    在这里插入图片描述

  • 3.对象的设计由来在这里插入图片描述

  • 4.面向对象的注意事项

①.类名用的英文,首字母大写,驼峰模式
②.类中定义的变量/方法称为成员变量/成员方法
③.成员变量本身存在默认值
在这里插入图片描述
④.一个class类中只能有一个public修饰,且public修饰的类名必须成为代码的文件名称。
⑤.对象与对象之间相互独立,除非两个对象指向同一块空间
⑥.如果对象没有被变量引用,则对象会成为垃圾对象,由java中的垃圾回收机制自动回收空间

②面向对象在计算机中执行原理

在这里插入图片描述

判断引用类型变量:如果一个变量中存储的是一个对象的地址,称为引用类型变量。

③this:一个变量,用在对象本身的方法中,来拿到当前对象的地址。

在这里插入图片描述
this的意义:解决成员变量名称与成员方法形参名称冲突问题。
在这里插入图片描述

在这里插入图片描述
说白了,this是一个java内置的对象形参,用来接收创建的变量的地址的。

④构造器:一种特殊的方法

在这里插入图片描述
在这里插入图片描述
个人感觉就是方便调用的对象方法。我们在创建对象时候,可以方便调用里面的同名方法。
在这里插入图片描述

⑤封装

在这里插入图片描述

封装的规则:合理隐藏,合理暴露
在这里插入图片描述

⑥实体类

在这里插入图片描述
应用示例:
在这里插入图片描述

⑦综合案例

public class MovieData {
    private int id;
    private String name;
    private double price;
    private double score;
    private String director;
    private String actor;
    private String info;

    public MovieData(int id, String name, double price, double score, String director, String actor, String info) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.score = score;
        this.director = director;
        this.actor = actor;
        this.info = info;
    }

    public MovieData() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    public String getDirector() {
        return director;
    }

    public void setDirector(String director) {
        this.director = director;
    }

    public String getActor() {
        return actor;
    }

    public void setActor(String actor) {
        this.actor = actor;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }
}

public class MovieOperation {
    MovieData[] movies = new MovieData[4];
    //功能1:一键展示所有电影的名称和价格信息

    public MovieOperation(MovieData[] movies) {
        this.movies = movies;
    }

    public void printAllInfo(MovieData[] movies){
        System.out.println("下面是所有电影的名称和价格信息:");
        for (int i = 0; i < 4; i++) {
            System.out.println("name:" + movies[i].getName());
            System.out.println("price" + movies[i].getPrice());
        }
    }
//功能2:查询某个id的详细信息
    public void printMovieInfo(int id){
        for (int i = 0; i <4 ; i++) {
            if(movies[i].getId() == id)
            {
                System.out.println("下面是该电影的所有信息:");
                System.out.println("name:" + movies[i].getName());
                System.out.println("price" + movies[i].getPrice());
                System.out.println("score:" + movies[i].getScore());
                System.out.println("actor:" + movies[i].getActor());
                System.out.println("director:" + movies[i].getDirector());
                System.out.println("info:" + movies[i].getInfo());
                break;
            }
        }
        System.out.println("您输入的id未找到匹配项~");
    }

}

import java.util.Scanner;

public class test {
    public static void main(String[] args) {
        //1.创建一个存储电影信息的类
        //2.创建一个电影操作方法的类
        //3.保存数据
        MovieData[] arr = new MovieData[4];
        arr[0] = new MovieData(1, "水门桥", 38.9, 9.8, "徐克", "吴京", "12w");
        arr[1] = new MovieData(2, "出拳吧", 39, 7.8, "唐晓白", "田雨", "3.5w");
        arr[2] = new MovieData(3, "月球陨落", 42, 7.9, "罗兰", "贝瑞", "17.9w");
        arr[3] = new MovieData(4, "一点就到家", 35, 8.7, "许宏宇", "刘昊然", "10.8w");

        //测试
        MovieOperation a = new MovieOperation(arr);
        System.out.println("---------------------");
        //4.实现test逻辑
        Scanner sc = new Scanner(System.in);
        do {
            System.out.println("提示:1.展开全部电影信息"+"\n" + "2.输入id,搜查该电影的详细信息"+"\n"+"0:退出");
            int commend = sc.nextInt();
            switch (commend) {
                case 0: {
                    System.out.println("退出");
                    break;
                }
                case 1: {
                    System.out.println("展开所有电影");
                    a.printAllInfo(arr);
                    break;
                }
                case 2: {
                    System.out.println("展开该电影所有信息");
                    int id = sc.nextInt();
                    a.printMovieInfo(id);
                    break;
                }
                default:
                    System.out.println("输入错误");
            }
        }while(true);
    }
}


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();
    }
}

②字符串(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

  • 32
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值