第5章:阶段练习

上节答案:B

 

本章节主要针对前面所学内容进行练习

5 - 1:编程练习

小伙伴们,请根据所学知识,参考注释,将代码编辑器中代码补充完整,实现成绩加分功能。

功能描述:为指定成绩加分,直到分数大于等于 60 为止,输出加分前和加分后的成绩,并统计加分的次数。

运行效果:

任务

温馨提示: 先试着自己独立完成,木有思路了也表着急。在后面 3 个小节中, @laurenyang 将分别讲解本小节练习的解析思路、优化的方案以及如何通过Eclipse的调试功能辅助代码开发

public class HelloWorld {
    public static void main(String[] args) {
        
        // 变量保存成绩
        int score = 53; 
        
        // 变量保存加分次数
        int count = 0;


        //打印输出加分前成绩 
          
       
        
        // 只要成绩小于60,就循环执行加分操作,并统计加分次数
        
        
        
        
        
        
        
        //打印输出加分后成绩,以及加分次数
      



    }
}

 

 

5 - 2:编程练习解析

编程练习

功能描述:为指定成绩加分,直到分数大于等于60分为止,输出加分和加分后的成绩,并统计加分的次数。

功能描述:

做法:首先我们新建一个Java项目:

点下面的Finish,接着我们去创建一个Java类:

指定包名、名称,点Finish:

完成后我们在回忆一下,这次编程练习的功能是:为指定的成绩进行加分的操作,直到分数大于等于60分为止。输出的是加分前的成绩和加分后的成绩,并统计加分的次数。步骤:1、定义一个变量,用来保存加分的次数;2、使用循环为成绩加分;3、每次执行循环加分操作加一分,并且统计加分的次数。

现在我们实现以下代码:

package com.imooc;
/*
 * 功能是:为指定的成绩进行加分的操作,直到分数大于等于60分为止。
 * 输出的是加分前的成绩和加分后的成绩,并统计加分的次数。
 * 步骤:
 * 1、定义一个变量,用来保存加分的次数;
 * 2、使用循环为成绩加分;
 * 3、每次执行循环加分操作加一分,并且统计加分的次数。
 */
public class Demo01 {
	public static void main(String[] args) {
		int score = 53;//假定初始成绩为53分
		int count = 0;//用来统计加分的次数
		System.out.println("加分前的成绩:" + score);//输出加分前的成绩
		while(score < 60) {//只要成绩小于60,就一直加分
			score++;//每次循环加一分
			count++;//统计次数
		}
		System.out.println("加分后的成绩:" + score);
		System.out.println("共加了" + count + "次!");
	}
}

运行一下,可以看出它的效果。

 

5 - 3:编程练习优化

实现完以后,我们可以看一下,它是否有一些不足的地方。

我们可以看到,这里的score是程序已经给定的,不是我们人为自己输入的,我们如何可以自己输入考试信息呢?

在Java中,它提供了一个Scanner工具类,来获取用户输入的值。怎么实现,在下面代码中会说:

package com.imooc;
import java.util.Scanner;//导入java.util.Scanner句末分号
/*
 * 功能是:为指定的成绩进行加分的操作,直到分数大于等于60分为止。
 * 输出的是加分前的成绩和加分后的成绩,并统计加分的次数。
 * 步骤:
 * 1、定义一个变量,用来保存加分的次数;
 * 2、使用循环为成绩加分;
 * 3、每次执行循环加分操作加一分,并且统计加分的次数。
 * 
 * 使用Scanner工具类来获取用户输入的成绩信息
 * Scanner类位于java.util包中,使用时需要导入此包
 * 步骤:
 * 1、导入java.util.Scanner
 * 2、创建Scanner对象(只有创建Scanner对象,我们才能够获取用户输入的数据)
 * 3、接受并保存用户的值
 */
public class Demo01 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);//创建Scanner对象
		System.out.println("请输入考试成绩信息");
		int score = input.nextInt();//这里把53改成input.nextInt(),input与20行等号前面的是一样的
		int count = 0;//用来统计加分的次数
		System.out.println("加分前的成绩:" + score);//输出加分前的成绩
		while(score < 60) {//只要成绩小于60,就一直加分
			score++;//每次循环加一分
			count++;//统计次数
		}
		System.out.println("加分后的成绩:" + score);
		System.out.println("共加了" + count + "次!");
	}
}

运行一下发现,我们输入数字时,是在请输入考试成绩信息的下面那一行输入的,要是想在同一行输入,就把请输入考试成绩信息前面println的ln去掉,ln就是line,就是运行完当前行后,自动转到下一行。

 

5 - 4:使用Eclipse调试程序

所谓的调试,就是找到程序的问题所在,找到问题出现的地方并加以修改。我们可以通过IDE工具中的断点调试功能。

比如把上面的程序while后面score<60改成score<=60再运行程序,出现了这样的情况:

请输入考试成绩信息

53

加分前的成绩:53

加分后的成绩:61

共加了8次!

这里说分数大于等于60分为止不是61分,这时候,我们可以根据程序运行结果判断问题出现在了哪里,我们可以在程序出现问题的地方添加断点,程序在运行到端点的时候会停止,我们可以在此处进行调试,一步一步的运行。现在我们假设,它在循环的地方出现了错误,我们可以在while最前面的地方鼠标双击,这里就多了一个点:

程序在运行到这个位置时会自动停止,我们可以进行一步一步的调试。现在,在工具栏上有一个Debug的按钮,点击以后,程序正常的执行,我们依然输入53,回车

然后进入Debug视图,我们看到,当它运行到我们所设置断点的位置时,程序并没有接着往下执行。接着我们可以点击工具栏上的Step Over进行单步执行(每行代码一条一条执行):

点以以后,他会执行当前行代码,这时我们可以看这边:

 

还是点击Step Over,score变成了54,count是0:

接着点Step Over:

count加一。

这样一直点,就有可能发现错误在哪里了。

 

5 - 5:进阶联系

编写Java程序,实现接受3个班级个4名学员的Java成绩,然后计算每个学员的平均分。

按照老师写法,写出来是这样:

package com.imooc;
import java.util.Scanner;
/*
 * 功能:实现接受3个班级个4名学员的Java成绩,然后计算每个学员的平均分
 * 知识点:二重循环、外层控制班级数量,内层控制班级中学员的数量
 */
public class Demo02 {
	public static void main(String[] args) {//如何加入main方法呢,简单来讲,直接输入main,然后按alt+/,回车就可以了
		int classNum = 3;//班级数量
		int stuNum = 4;//学生数量
		double sum = 0;//总分
		double avg = 0;//平均分
		//现在我们要手动输入成绩,所以需要Scanner
		Scanner input = new Scanner(System.in);
		for(int i = 1;i <= classNum;i++) {//外层控制班级数量
			System.out.println("***请输入第" + i + "个班级的成绩***");
			for(int j = 1;j <= stuNum;j++) {//内层控制班级中学员的数量
				System.out.println("请输入第" + j + "个学员的成绩");
				int score = input.nextInt();
				sum = sum + score;//累加求和
			}
			avg = sum / stuNum;//计算平均分
			System.out.println("第" + i + "个班级学生的平均分为:" + avg);
		}
	}
}

但是运行出来有点问题:

可以看到第二个班级平均分不对,输入了4个不超过100的分数,平均分为什么超过了100呢?那么这里我们可以用断点调试来检查哪里出现了错误。

如何检查上面已经说过了,经过检查,这里的问题是在外层循环时,每次必须要把sum清零才行(sum = 0;),这样就没有问题了。

 

经验总结:

1、通过分析,明确需求

2、整理相关知识点

3、梳理实现流程

4、借助断点跟踪解决问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值