面向对象(构造方法中我遇到的BUG)

在这段程序中的Bug:
就是当我在控制台测试的时候我进行到第一个提示“继续购买t/n”这里的t是继续购买的意思,n是不再购买的意思,输入n程序结束,输入t则返回第一个方法继续输入购买数量,单价,付款金额
若输入n则程序退出且提示“谢谢惠顾欢迎下次再来”
我输入了y然后依次输入了购买数量及单价,付款金额后控制台提示“继续购买t/n”我输入了n
可是控制台本应该退出程序的却又输出了提示信息“继续购买t/n”于是我用排除法的思路排除到了B方法的循环这里是多余或者说不必要的于是我就将while的死循环去除了,但是随后又遇到了第二个BUG:就是当我第二次购物结束后我输入n他却跳到了results方法的支付完成内行代码,然后我重新整理了一下整个程序的逻辑后发现是这里的if分支语句缺少else的问题

 if(result>payment){
    
    
            System.out.println("请不要乱输入 价格不够请重新输入");
            results();
        }
            payment -= result;
            System.out.println("支付完成");
            System.out.println("卡内还剩"+payment);
            B();

BUG程序的代码

package game;
//商品打折 超过1500打5折
import java.util.Scanner;
class Test_Discount {
    
    
    Scanner scan = new Scanner(System.in);
    double money;//购买数量
    double number;//单价
    double result;//总价
    double payment;//

    public static void main(String[]args){
    
    
        //new 一个对象
        Test_Discount A = new Test_Discount();
        //A对象内 赋值head方法
        A.head();
        System.out.println("谢谢惠顾欢迎下次再来");
    }
    //设置 需要的变量方法
    public void head(){
    
    
        System.out.println("请输入购买数量");
        double money = scan.nextDouble();
        System.out.println("当前购买数量为:"+money);
        System.out.println("请输入购买价格");
        double number = scan.nextDouble();
        result = money*number;
        System.out.println("您的总价为:"+result);
        process();
    }
    //进行判断
    public void process(){
    
    

        if (result>=5000){
    
    
            System.out.println("目前有打折优惠满5000--5折优惠");
            result *= 0.5;
        }
        System.out.println("您当前的价格为:"+result);
        results();
    }
    //判断的结果
    public void results(){
    
    
        System.out.println("请付款");
        payment = scan.nextDouble();
        if(result>payment){
    
    
            System.out.println("请不要乱输入 价格不够请重新输入");
            results();
        }
            payment -= result;
            System.out.println("支付完成");
            System.out.println("卡内还剩"+payment);
            B();
    }
    //是否继续  否则返回主方法
    public  void B(){
    
    
        while (true) {
    
    
            System.out.println("继续购买y/n");
            String a = scan.next().toLowerCase();
            if ("y".equals(a)) {
    
    
                head();
            } else if ("n".equals(a)) {
    
    
                return;
            } else {
    
    
                System.out.println("瞎输什么");
            }
        }
    }
}
//return 结束该方法
//break 结束当前循环
//continue 跳出本次循环

修复后的整个程序的代码:

package game;
//商品打折 超过1500打5折
import java.util.Scanner;
class Test_Discount {
    
    
    Scanner scan = new Scanner(System.in);
    double money;//购买数量
    double number;//单价
    double result;//总价
    double payment;//

    public static void main(String[]args){
    
    
        //new 一个对象
        Test_Discount A = new Test_Discount();
        //A对象内 赋值head方法
        A.head();
        System.out.println("谢谢惠顾欢迎下次再来");
    }
    //设置 需要的变量方法
    public void head(){
    
    
        System.out.println("请输入购买数量");
        double money = scan.nextDouble();
        System.out.println("当前购买数量为:"+money);
        System.out.println("请输入购买价格");
        double number = scan.nextDouble();
        result = money*number;
        System.out.println("您的总价为:"+result);
        process();
    }
    //进行判断
    public void process(){
    
    

        if (result>=5000){
    
    
            System.out.println("目前有打折优惠满5000--5折优惠");
            result *= 0.5;
        }
        System.out.println("您当前的价格为:"+result);
        results();
    }
    //判断的结果
    public void results(){
    
    
        System.out.println("请付款");
        payment = scan.nextDouble();
        if(result>payment){
    
    
            System.out.println("请不要乱输入 价格不够请重新输入");
            results();
        }else {
    
    
            payment -= result;
            System.out.println("支付完成");
            System.out.println("卡内还剩" + payment);
            B();
        }
    }
    //是否继续  否则返回主方法
    public  void B(){
    
    
        System.out.println("继续购买y/n");
        String a = scan.next().toLowerCase();
        if ("y".equals(a)) {
    
    
            head();
        } else if ("n".equals(a)) {
    
    
            return;
        } else {
    
    
            System.out.println("瞎输什么");
            B();
        }
    }
}
//return 结束该方法
//break 结束当前循环
//continue 跳出本次循环

总结:

当遇到需要if分支判断的时候最好是加上else避免不必要的且难以解释的小BUG,其次就是能使用调用方法来完成的循环尽量别使用while或do——while循环,容易出现类似我这种情况的BUG

猜你喜欢

转载自blog.csdn.net/qq_54177999/article/details/114293310