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+"米");
}