断点调试与零钱通系统

目录

断点调试

基本介绍

断点调试的一些快捷键

断点调试例题

简易版零钱通系统

面向对象版

面向过程版


断点调试

基本介绍

1.断点调试是指在程序的某一行设置一个断点,调试时,程序运行到这一行就会停住,然后你可以一步一步往下调试,调试过程中可以看各个变量当前的值,出错的话,调试到出错的代码行即显示错误,停下。进行分析从而找到这个Bug

2.断点调试是程序员必须掌握的技能。

3.断点调试也能帮助我们查看java底层源代码的执行过程,提高我们程序员的Java水平

断点调试的一些快捷键

F7:跳入方法内

F8:逐行执行代码

shiftf + F8 :跳出方法

断点调试例题

思路分析:

1.我们知道对象的创建流程,会先加载类的信息

2.然后进行默认初始化,根据属性的类型进行默认初始化

3.然后进行显示初始化,看我们有没有之间给属性赋值,这一步是完成这样的操作的

4.才是我们的构造器初始化

package com.debug_;

//debug对象创建的过程,加深对调试的理解
public class DebugExercise {
    public static void main(String[] args) {
        //创建对象的流程
        //(1) 加载 Person类信息
        //(2) 初始化 2.1默认初始化, 2.2 显式初始化 2.3 构造器初始化
        //(3) 返回对象的地址
        Person jack = new Person("jack", 20);
        System.out.println(jack);
    }
}
class Person {
    private String name;
    private int age;

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

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

简易版零钱通系统

面向对象版

代码演示:

思路分析:

1.其实零钱通系统,并没有那么简单,我们这里写的只是,最基本的版本,而且只针对一个人来说,也没有多用户,所以非常的简单,只需要捋清楚逻辑即可

2.我们开打印菜单的控制上,使用了一个布尔类型的变量来控制,当用户需要退出时,只需要把loop置成false即可,并且我们在退出系统的过程中,还增加了判断,在代码中我们可以看到,先使用了一个无线循环,如果用户输入的不是y那么我们就一直不会退出

3.在编写收益入账的方法的时候,我们要注意,收入的金额不能小于0,否则不符合常理,因此如果用户的收入金额小于0,我们需要做出相应的处理

4.在编写消费的方法时候,我们要注意,消费的金额不能,大于余额,如果消费的金额比余额还要大,那么是非常不合理的,因此在这里,我们也要做出判断

5.我们最好把每个功能封装成一个方法,不要在使用以前的面向对象的编程思想,这样只需要去调用对应的方法即可,还方便管理

package idea.smallchange;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

/**
 * 零钱通系统
 */
public class smallChangeView {
    private boolean loop = true;//改变量用于控制,菜单的打印
    private Scanner scanner = new Scanner(System.in);
    private String key = "";//该变量用于存放用户的输入

    private double balance;//该变量表示余额
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:MM");

    private String str = "===================零钱通明细=====================\n";

    //编写方法显示明细
    public void show() {
        System.out.println(str);
    }

    //编写方法完成消费
    public void consume() {
        System.out.print("请输人消费的金额");
        double money = scanner.nextDouble();
        if (money > balance) {
            System.out.println("消费的金额不可以超过余额");
            return;
        }
        balance -= money;
        str += money + "\t\t\t" + sdf.format(date) + "\t" + "余额" + balance + "\n";
    }

    //编写方法完成收益入账
    public void RevenueEntry() {
        System.out.print("请输入你的收入金额:");
        double money = scanner.nextDouble();
        if (money < 0) {
            System.out.println("收入的金额不可以为小于0");
            return;
        }
        balance += money;
        str += money + "\t\t\t" + sdf.format(date) + "\t" + "余额" + balance + "\n";
    }

    //编写方法,完成退出
    public void exit() {
        //1.用户输入4退出时,给出提示“你确定要退出吗?y/n”,必须输入正确的y/n,否则循环输入指令,直到输入y或者n。
        for (; ; ) {
            System.out.print("你确定要退出吗?y/n:");
            char c = scanner.next().charAt(0);
            if (c == 'y') {
                System.out.println("退出零钱通系统");
                loop = false;
                return;
            } else {
                System.out.println("你的输入有误必须输入正确的y/n");
            }
        }
    }

    //编写方法,完成零钱通系统菜单的打印
    public void viewMain() {
        do {
            System.out.println("\n=================零钱通菜单=====================");
            System.out.println("\t\t\t1.零钱通明细");
            System.out.println("\t\t\t2.收益入账");
            System.out.println("\t\t\t3.消费");
            System.out.println("\t\t\t4.退出");

            System.out.print("请输入你的选择:");
            key = scanner.next();
            switch (key) {
                case "1":
                    show();
                    //System.out.println("零钱通明细");
                    break;
                case "2":
                    RevenueEntry();
                    //System.out.println("收益入账");
                    break;
                case "3":
                    consume();
                    //System.out.println("消费");
                    break;
                case "4":
                    //System.out.println("退出");
                    exit();
                    break;
                default:
                    break;
            }

        } while (loop);
    }
}

smallChangeSystem类 

package idea.smallchange;

/**
 * 该类完成对界面层的各种服务
 */
public class smallChangeSystem {
    public static void main(String[] args) {
        new smallChangeView().viewMain();
    }

}

面向过程版

代码演示:

package com.SmallChange;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class SmallChangeSys {
    public static void main(String[] args) {
        //属性
        boolean loop = true;//用来判断是否继续打印菜单
        Scanner scanner = new Scanner(System.in);//创建一个Scanner 对象用来接受用户的输入
        String n = "";//定义一个字符串常量用来对switch进行判断
        double money = 0;//表示金额
        double balance = 0;//表示余额
        Date date = null;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:MM");
        String dtaial = "===================零钱通明细=====================";
        do {
            System.out.println("\n=================零钱通菜单=====================");
            System.out.println("\t\t\t1.零钱通明细");
            System.out.println("\t\t\t2.收益入账");
            System.out.println("\t\t\t3.消费");
            System.out.println("\t\t\t4.退出");


            System.out.println("请选择1到4");

            n = scanner.next();
            switch (n) {
                case "1"://打印零钱通明细
                    System.out.println(dtaial);
                    break;
                //2. 在收益入账时,判断金额是否合理,并给出相应的提示。
                case "2"://收益入账
                    System.out.println("请收益入账金额");
                    money = scanner.nextDouble();//定义一个money变量用来接受入账的金额
                    if (money < 0) {//因为是入帐收入 所以存进来的金额不能小于0 否则提示信息
                        System.out.println("请输入正确金额");
                        break;
                    }
                    balance += money;//此时余额就等于收益加上自己本身
                    date = new Date();//获取当前格式
                    dtaial += "\n收益入账\t" + money + "\t" + sdf.format(date) + "\t" + "余额" + balance;
                    break;
                //2. 在收益入账和消费时,判断金额是否合理,并给出相应的提示。
                case "3"://消费
                    System.out.println("请输入消费内容");
                    String consumption = scanner.next();//定义一个consumption变量用来接受消费的内容
                    System.out.println("请输入消费的金额");
                    double a = scanner.nextDouble();//定义一个a变量用来接受消费的金额
                    if (a > balance) {//消费的钱不可以超过余额
                        System.out.println("消费的价格超过余额范围应该在0 到" + balance + "之间");
                        break;
                    }
                    balance -= a;//消费之后余额就减去消费之后的钱
                    dtaial += "\n" + consumption + "\t" + a + "\t" + sdf.format(date) + "\t" + "余额" + balance;

                    break;
                case "4"://退出
                    //1.用户输入4退出时,给出提示“你确定要退出吗?y/n”,必须输入正确的y/n,否则循环输入指令,直到输入y或者n。
                    String judge = "";//定义一个judge变量用来保存输入的字符串
                    while (true) {//先给一个死循环如果用户不输入正常的字符那么就重复输入,直到输入正确的值为止
                        System.out.println("你确定要退出吗?请输入正确的选项y/n");//提示信息
                        judge = scanner.next();//接受用户输入
                        if ("n".equals(judge) || "y".equals(judge)) {
                            //用户输入的只能是y或者n  判断字符串是否相等要用equals方法
                            break;
                        }
                    }
                    //经过上面的判断那么就说明用户输入的值肯定是y或者n
                    if (judge.equals("y")) {//判断如果是y表示退出程序反之就是不退出
                        System.out.println("退出");
                        loop = false;//把do while的变量置成false那么就退出
                    }
                    break;
                default:
                    System.out.println("你输入的内容有误");
                    break;
            }
        } while (loop);


    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值