整理最近学习的Java

  1. 类和对象的定义
  • 访问限定符:
  • public(公有的) default(默认包访问权限) protected(保护) private(私有)
  1. 对象大小 对象头(8字节(JVM位数有关)) + 实例变量 + 内存填充 (8的倍数)
  2. 方法调用设计到的内存结构
  3. 类的应用(MyArrayList,ATM机)
  • MyArrayList

    public class MyArrayList {
    private int[] element;//定义数组
    private static int size;//有效数组大小
    private final int INITSIZE = 10;//初始化数组长度

    public MyArrayList() {//构造函数初始化成员变量
    element=new int[INITSIZE];
    }

    public void addHead(int value) {
    ensureCapacity();
    //将元素后移一位
    for(int i=size-1;i>=0;i--) {
    element[i+1]=element[i];
    }
    element[0]=value;
    size++;
    }
    //对数组扩容
    private void ensureCapacity() {
    // TODO Auto-generated method stub
    if(sizeelement.length) {
    element=Arrays.copyOf(element,element.length+(element.length>>1));
    }
    }
    //将插入的值赋给末尾元素,长度+1
    public void addTail(int value) {
    ensureCapacity();
    element[size++]=value;
    //size++;
    }
    private boolean isEmpty() {
    return size
    0;
    }
    //1 2 2 3
    public void removeValue(int value) {

    if(isEmpty()) {
    return;
    }
    for(int i=0;i<size;) {
    if(element[i]==value) {
    for(int j=i+1;j<size-i;j++) {
    element[j-1]=element[j];
    }
    }else {
    i++;
    }
    }

    }

    public void removeHead() {
    if(isEmpty()) {
    return;
    }
    for(int i=1;i<size;i++) {
    element[i-1] = element[i];
    }
    size--;
    }
    /**
    * 去掉尾元素,先判断是否为空,不则直接长度-1
    /
    public void removeTail() {
    if(isEmpty()) {
    return;
    }
    size--;
    }
    /
    *
    *
    * @param srcValue ֵ 原有值
    * @param aimValue 目标值
    */
    public void change(int srcValue,int aimValue) {
    if(isEmpty()) {
    return;
    }
    for(int i=0;i<size;i++) {
    if(element[i] == srcValue) {
    element[i] = aimValue;
    }
    }
    }
    public boolean contains(int value) {
    for(int i=0;i<size;i++) {
    if(element[i] == value) {
    return true;
    }
    }
    return false;
    }
    public void show() {
    for(int i=0;i<size;i++) {
    System.out.println(element[i]+" ");
    }
    }

  • ATM

    /**
    * ATM类
    * 基于当前登录成功的这张卡进行操作
    * 存款,取款,转账,查余额,退卡
    * @author Ray
    *
    */
    public class ATM {
    private Bank bank;
    private static Scanner scanner;

    public ATM() {
    bank = new Bank();
    scanner=new Scanner(System.in);
    }
    private BankCard login(int id,int passwd){
    return bank.contains(id,passwd);
    }
    //注册功能,在银行增加卡是否成功
    private boolean register(int id,int passwd) {

    BankCard card=new BankCard(id,passwd);
    return bank.add(card);

    }

    public void start(){

    while(true) {
    System.out.println("1. 登陆 2.注册 3.退出");
    int choice = scanner.nextInt();
    if(choice == 3){
    break;
    }
    System.out.println("请输入账号密码:");
    int id = scanner.nextInt();
    int passwd = scanner.nextInt();
    BankCard successCard=null;
    switch (choice){
    case 1:
    successCard=login(id,passwd);
    if(successCard != null) {
    System.out.println("登陆成功");
    loginSuccess(successCard);
    }else {
    System.out.println("登陆失败");
    }
    break;
    case 2:
    if(register(id,passwd)) {
    System.out.println("注册成功");
    }else {
    System.out.println("注册失败");
    }

    break;
    }
    }
    }
    private void loginSuccess(BankCard successCard) {
    while(true) {
    System.out.println("1. 存款 2.取款 3.转账 4.余额 5.退卡");
    int choice = scanner.nextInt();
    if(choice == 5){
    break;
    }
    switch(choice) {
    case 1:
    System.out.println("请输入存款金额");
    int money = scanner.nextInt();
    successCard.saveMoney(money);
    System.out.println("存款成功");
    break;
    case 2:
    System.out.println("请输入取款金额");
    money = scanner.nextInt();
    if(successCard.withdrawMoney(money)) {
    System.out.println("取款成功");
    }else {
    System.out.println("取款失败");
    }
    break;
    case 3:
    System.out.println("请输入转账用户名和密码");
    int id=scanner.nextInt();
    int passwd = scanner.nextInt();
    System.out.println("请输入转账金额");
    money = scanner.nextInt();
    BankCard userCard = bank.contains(id, passwd);
    if(userCard != null) {
    if(successCard.withdrawMoney(money)) {//当前卡取款成功
    userCard.saveMoney(money);
    System.out.println("转账成功");
    }else {
    System.out.println("余额不足");
    }
    }else {
    System.out.println("无该用户");
    }

    break;
    case 4:
    System.out.println("余额为:"+successCard.getMoney());
    break;

    }
    }
    }

    }

    /**
    *银行类
    **/

    public class Bank {
    private BankCard[] cards;//10
    private int size;//有效用户个数
    private static final int INITSIZE = 10;

    public Bank() {
    cards=new BankCard[INITSIZE];
    //this(INITSIZE)
    }
    public boolean add(BankCard card) {
    //如果之前注册过,增加失败
    if(contains(card.getId(),card.getPasswd()) != null) {
    return false;
    }
    if(size == cards.length) {//数组已满,扩容
    cards = Arrays.copyOf(cards, cards.length);
    }
    cards[size] = card;
    size++;
    return true;
    }
    public BankCard contains(int id, int passwd) {
    // TODO Auto-generated method stub
    BankCard card = null;
    for(int i=0;i<size;i++) {
    if(idcards[i].getId()&&passwdcards[i].getPasswd()) {
    card = cards[i];
    break;
    }

    }
    return card;
    }
    }

    /**
    * 银行卡类
    * @author Ray
    *
    */
    public class BankCard {
    private int id;
    private int passwd;
    private int money;

    public BankCard(int id,int passwd) {
    this.id=id;
    this.passwd=passwd;
    }

    public int getId() {
    return id;
    }

    public int getPasswd() {
    return passwd;
    }

    public int getMoney() {
    return money;
    }
    public void saveMoney(int money) {
    // TODO Auto-generated method stub
    this.money+=money;
    }

    public boolean withdrawMoney(int money) {
    boolean flag = false;
    // TODO Auto-generated method stub
    if(this.money >= money) {
    this.money -= money;
    flag = true;
    }
    return flag;
    }
    }

posted @ 2020-10-29 23:41  gyViolet  阅读(62)  评论(0)    收藏  举报