debug及练习

18 篇文章 0 订阅

debug

在这里插入图片描述

什么是程序debug

debug是程序开发人员必会的一项调试程序的技能

debug作用

追踪代码运行流程

程序异常的定位和调试

线上问题追踪

idea debug的步骤

设置断点(F9)

调试程序

  • 显示执行点(Alt+F10)

  • 步过F8

    • 不进入方法
    • 用于调试过程中不进入方法体的情况
  • 步入

    • 一般进入编程中自定义的方法,不会进入官方类库的方法
  • 强制步入Alt+shift+F7

    • 进入官方类库,帮助我们JDK源代码
  • 步出(shift+F8)

    • 从方法内退回到方法调用处
  • 回退:返回单签方法调用处

  • 计算表达式

    • 改变变量的值
  • 条件断点

    • 右键单击断点处

练习

通过键盘录入的方式输入星期数(1-7的整数),显示今天的减肥活动,使用switch和if两种判断语句分别完成。(可写成2个方法)
​ 周一:跑步
​ 周二:游泳
​ 周三:慢走
​ 周四:动感单车
​ 周五:拳击
​ 周六:爬山
​ 周日:好好吃一顿

public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入数字(1-7)");
        int num=sc.nextInt();
        sport2(num);

    }
    public static void sport(int day){
        if(day==1){
            System.out.println("今天的活动是:跑步!");
        } else if (day==2) {
            System.out.println("今天的活动是:游泳!");
        }else if (day==3) {
            System.out.println("今天的活动是:慢走!");
        }else if (day==4) {
            System.out.println("今天的活动是:动感单车!");
        }else if (day==5) {
            System.out.println("今天的活动是:拳击!");
        }else if (day==6) {
            System.out.println("今天的活动是:爬山!");
        }else if (day==7) {
            System.out.println("今天的活动是:好好吃一顿!");
        }else{
            System.out.println("去死吧!故意找茬是吧?");
        }
    }

    //switch
    public static void sport2(int day){
        switch (day){
            case 1:
                System.out.println("今天的活动是:跑步!");break;
            case 2:
                System.out.println("今天的活动是:游泳!");break;
            case 3:
                System.out.println("今天的活动是:慢走!");break;
            case 4:
                System.out.println("今天的活动是:动感单车!");break;
            case 5:
                System.out.println("今天的活动是:拳击!");break;
            case 6:
                System.out.println("今天的活动是:爬山!");break;
            case 7:
                System.out.println("今天的活动是:好好吃一顿!");break;
                default:
                    System.out.println("去死吧!故意找茬是吧?");
        }
    }

题目2(综合)

​ 朋友聚会的时候可能会玩一个游戏:逢七过。
​ 规则是:从任意一个数字开始报数,当你要报的数字包含7或者是7的倍数时都要说:过。
​ 为了帮助大家更好的玩这个游戏,这里我们直接在控制台打印出1-100之间的满足逢七必过规则的数据。
​ 这样,大家将来在玩游戏的时候,就知道哪些数据要说:过。

public static void main(String[] args) {
        pass(5);
    }
    public static void pass(int n){
        for( int num=n;num<=100;num++){
            if (num%7==0){
                System.out.print(num+" ");
            }
        }
    }

题目3(综合)

有一个很有名的数学逻辑题叫做不死神兔问题。有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?

public static void main(String[] args) {
        System.out.println(count(20));
    }
    public static int count(int month){
        int  n=0;
        int sum=0;
        n=month/3;
        sum=(int) Math.pow(2,n);
        return sum;
    }

题目4(综合)

​ 我国古代数学家张丘建在《算经》一书中提出的数学问题:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。
​ 百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?

public static void main(String[] args) {
    buyChicken();
    }
    public static void buyChicken(){
        int money=100;
        for (int father = 0; father < 21; father++) {
            for (int mother = 0; mother < 34; mother++) {
                int child=100-father-mother;
                if(father*5+mother*3+child/3==100&&child%3==0){
                    System.out.println("鸡翁"+father+",鸡母"+mother+",鸡雏"+child);
                }
            }
        }
    }

题目5(综合)

有这样的一个数组,元素是{68,27,95,88,171,996,51,210}。求出该数组中满足要求的元素和,
要求是:求和的元素个位和十位都不能是7,并且只能是偶数。

  public static void main(String[] args) {
        int [] array={68,27,95,88,171,996,51,210};
        int [] array2={68,27,95,70,171,788,51,210};
        tell(array2);

    }
    public static void tell(int [] arr){
        int sum=0;
        for (int i = 0; i < arr.length; i++) {
            int shi=0;int ge=0;
            if (arr[i]%2==0){
                if(arr[i]>=10&&arr[i]<100){
                    shi=arr[i]/10;
                    ge=arr[i]%10;
                }else if (arr[i]>=100&&arr[i]<1000){
                    shi=arr[i]/10%10;
                    ge=arr[i]%100;
                }

                if(ge!=7&&shi!=7){
                    System.out.print(arr[i]+" ");
                }
            }
        }

        }

题目6(综合)

设计一个方法,用于比较两个数组的内容是否相同。

public static void main(String[] args) {
        int []arr1={1,2,3,4,5};
        int []arr2={1,2,3,5,4};
        System.out.println(compareSame(arr1,arr2));
    }
    public static boolean compareSame(int []arr1,int[]arr2){
        //先比较长度,再比较内容
        if(!compareLength(arr1, arr2)){
           return false;
        }
        for (int i = 0; i < arr1.length; i++) {
            if (arr1[i]!=arr2[i]){
                return false;
            }
        }
        return true;

    }
    public static boolean compareLength(int[] arr1,int[] arr2){
        if (arr1.length==arr2.length){
            return true;
        }else {
            return false;
        }
    }

题目7(综合)

已知一个数组 arr = {19, 28, 37, 46, 50}; 键盘录入一个数据。定义一个方法,完成查找该数据在数组中的索引,并在控制台输出找到的索引值。

 public static void main(String[] args) {
    int []arr={19, 28, 37, 46, 50};
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int index=searchIndex(arr,n);
        if(index==-1){
            System.out.println("数组中不存在该数字!");
        }else{
            System.out.println(n+"的索引是"+index);
        }

    }
    public static int  searchIndex(int []arr,int n){

        for (int i = 0; i < arr.length; i++) {
            if(n==arr[i]){
                n=i;
                return n;
            }
        }
       return -1;
    }

题目8(综合)

​ 已知一个数组 arr = {19, 28, 37, 46, 50}; 用程序实现把数组中的元素值反转(在原数组中操作,不能定义第二个数组),反转后的数组 arr = {50, 46, 37, 28, 19}; 并在控制台输出反转后的数组元素。

public static void main(String[] args) {
        int []arr={19, 28, 37, 46, 50};
        drama(arr);

    }
    public static void drama(int []arr){
        for (int i = 0; i < arr.length/2; i++) {
            int temp=arr[i];
            arr[i]=arr[arr.length-1-i];
            arr[arr.length-1-i]=temp;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }

题目9(综合)

在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。
选手的最后得分为:去掉一个最高分和一个最低分后 的4个评委平均值 (不考虑小数部分)。

    public static void main(String[] args) {
    int []score=new int[6];
    Scanner sc=new Scanner(System.in);
        for (int i = 0; i < score.length; i++) {
            score[i]=sc.nextInt();
        }
        System.out.println("平均分为:"+getAverageScore(score));
    }
    public static int  getAverageScore(int []arr){
        double avg=0;
        int top=arr[0];
        int min=arr[0];
        int sum=0;
        for (int i = 0; i < arr.length; i++) {
            if(top<arr[i]){
                top=arr[i];
            }
            if(min>arr[i]){
                min=arr[i];
            }
            sum+=arr[i];
        }
        avg=(sum-top-min)/((arr.length)-2);
        return (int)avg;
    }

1,编写程序实现对给定的 4 个整数从大到小的顺序排列。

public static void main(String[] args) {
        int []array=new int[4];
        System.out.println("请输入四个整数:");
        Scanner sc=new Scanner(System.in);
        for (int i = 0; i < array.length; i++) {
            array[i]=sc.nextInt();
        }
        System.out.println("排序后:");
        sort(array);
    }
    public static void sort(int []arr){
        for (int i = 0; i < arr.length-1; i++) {
            for (int j = 0; j < arr.length-1-i; j++) {
                int min=arr[0];
                if(arr[j]<arr[j+1]){
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }

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

2, 输入 3 个正数,判断能否构成一个三角形。

public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入三个正数");
        double a=sc.nextDouble();
        double b=sc.nextDouble();
        double c=sc.nextDouble();
        isTriangle(a,b,c);
    }
    public static void isTriangle(double a,double b,double c){
        if(a<=0||b<=0||c<=0){
            System.out.println("不能构成三角形,边长不能为0或负数!");
        } else if (a+b>c&&a+c>b&&b+c>a) {
            System.out.println("可以构成三角形");
        }else {
            System.out.println("不能构成三角形");
        }
    }

3,编写程序,从键盘输入一个 0~99999 之间的任意数,判断输入的数是几位数?

public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("从键盘输入一个 0~99999 之间的任意数:");
        double num=sc.nextDouble();
        if(isCount(num)==-1){
            System.out.println("输入的数字不符合要求");
        }else {
            System.out.println(num+"是一个"+isCount(num)+"位数");
        }
    }
    public static int  isCount(double num){
        if(num>=0&&num<10){
            return 1;
        } else if (num>=10&&num<100) {
            return 2;
        }
        else if (num>=100&&num<1000) {
            return 3;
        }
        else if (num>=1000&&num<10000) {
            return 4;
        } else if (num>=10000&&num<=99999) {
            return 5;
        }else {
            return -1;
        }
    }

4,编写程序,给定一个学生成绩,给出相应等级:(要求:请用方法实现,传入成绩参数,返回等级打印)

​ 90~100 优秀

​ 80~89 良好

​ 70~79 中等

​ 60~69 及格

​ 0~59 不及格

 public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个成绩:");
        int score=sc.nextInt();
        tellGrade(score);
    }
    public static void tellGrade(int num){
        if(num>100||num<0){
            System.out.println("此数不符合要求");
        } else {
            switch (num/10){
                case 0:
                case 1:
                case 2:
                case 3:
                case 4:
                case 5:
                    System.out.println("不及格!");break;
                case 6:
                    System.out.println("及格!");break;
                case 7:
                    System.out.println("中等!");break;
                case 8:
                    System.out.println("良好!");break;
                case 9:
                case 10:
                    System.out.println("优秀!");break;

            }
        }

    }

5,验证“鬼谷猜想”:对任意自然数,若是奇数,就对它乘以 3 再加 1;若是

偶数,就对它除以 2,这样得到一个新数,再按上述计算规则进行计算,一直进

行下去,最终必然得到 1。(1–1000)

 public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int num=sc.nextInt();
        System.out.println(guessReault(num));
    }
    public static int guessReault(int n){
       do{
           if (n%2==0){
                n=n/2;
           }else{
               n=n*3+1;
           }

       }while (n!=1);
        return n;
    }

6,某公司每月标准上班时间是160小时,每小时工资是30元。

如果上班时间超出了160小时,超出部分每小时按1.5倍工资发放。请编写程序计算员工月工资。(请用方法实现)

 public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int num=sc.nextInt();
        System.out.println("工资为:"+getWages(num));
    }
    public static double getWages(int num){
        double wage=0;

        if(num<160){
            System.out.println("输入的时长有误");
        } else {
            double more=(num-160)*(1.5*30);
            wage=160*30+more;
        }
        return wage;
    }

7,求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由用户控制。

public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一个数字(1-9):");
        int a=sc.nextInt();
        System.out.println("请输入要打印的个数:");
        int n=sc.nextInt();
        System.out.println("和:"+getSum(a,n));
    }
    public static int getSum(int a,int n){
        int sum=0;
        int num=0;
        if(a>9||a<1){
            System.out.println("此数不满足条件");
        }else {
            for (int i = 0; i <n; i++) {
                num+=a;
                sum+=num;
                System.out.print(num+" ");
                num*=10;

            }
            System.out.println();
        }
        return sum;
    }

8,题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高? (利用方法)

 public static void main(String[] args) {
    getHeight();
    }
    public static void getHeight(){
        int count=1;
        double sum=0,height=100;
        for (int i =0; i <10; i++) {
            while (count<10){
                sum+=height;
                height=height/2;
                sum+=height;
                count+=2;
            }
        }
        System.out.println("高度为"+height+"米,共经过"+sum+"米");
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值