(一) 学习总结
1. 在 java 中通过 Scanner 类完成控制台的输入, 查阅 JDK 帮助文档, Scanner 类实现基本数据输入的方法是什么? 不能只用文字描述, 一定要写代码, 通过具体实例加以说明
文本扫描类 Scanner(java.util.Scanner), 可以使用不同的 next 方法将输入的文本转换为不同类型的值
获取基本类型数据的方法是:
nextInt(): 读取整型数据
nextDouble(): 读取双精度性数据
next(): 读取输入的下一个单词 (空格作为分隔符)
nextLine(): 读取输入的下一行内容
- import java.util.Scanner;
- public class Test{
- public static void main(String[]args){
- Scanner input=new Scanner(System.in);
- ...
- }
- }
2.Random 类和 Math 类的 random() 方法都能产生随机数, 这两种方式有什么区别, 各有什么特点呢? 查阅 JDK 帮助文档, 并举例加以说明
util 的 random 是一个类: 包含 nextInt(),nextDouble () 等类似的方法 math 的 random 只是一个方法: 返回带正号的 double 值, 该值大于等于 0.0 且小于 1.0
例如, 对比两种方法产生的随机数:
- import java.util.Random;
- public class Demo{
- public static void main(String args[]){
- Random a=new Random();
- int a1=a.nextInt();
- double b=Math.random();
System.out.println("这是调用 Random() 类产生的随机数");
System.out.println(a1);
System.out.println("这是调用 Math.random() 方法产生的随机数");
- System.out.println(b);
- }
- }
使用 Math.Random() 的方法来产生 Int 类型的随机数, 例如产生一个 0~100 之间的随机数:
- import java.util.Random;
- public class Demo{
- public static void main(String args[]){
- Random a=new Random();
- int b=a.nextInt();
- int c=(int)(Math.random()*100);
System.out.println("这是调用 Random() 类产生的随机数");
System.out.println(b);
System.out.println("这是调用 Math.random() 方法产生的随机数");
- System.out.println(c);
- }
- }
两种方法都能够起到相同的作用, 但是, 如果许多线程需要以极高的速率生成伪随机数, 那么 Math.random() 可能会减少每个线程对拥有自己伪随机数生成器的争用所以很多应用程序会发现 Math.random() 方法更易于使用
3. 运行下列程序, 结果是什么? 查阅资料, 分析为什么
- public class Test {
- public static void main(String args[]) {
- double a = 0.1;
- double b = 0.1;
- double c = 0.1;
- if((a + b + c) == 0.3){
- System.out.println("等于 0.3");
- }else {
- System.out.println("不等于 0.3");
- }
- }
- }
该程序运行结果为: 不等于 0.3
原因: 浮点型数据在进行运算时有极小误差
为了处理精度损失的问题, 可以使用 java.math.BigDecimal 类, 查阅 JDK 帮助文档或教材 p378, 对上述程序进行修改
- import java.math.BigDecimal;
- import java.math.MathContext;
- public class Test {
- public static void main(String args[]) {
- BigDecimal a = new BigDecimal(0.1);
- BigDecimal b = new BigDecimal(0.1);
- BigDecimal c = new BigDecimal(0.1);
- if(a.add(b).add(c).round(new MathContext(1)).equals(new BigDecimal("0.3"))){
- System.out.println("等于 0.3");
- }else {
- System.out.println("不等于 0.3");
- }
- }
- }
以上程序输出结果为: 等于 0.3
4. 在环境配置中, PATH 和 CLASSPATHJAVA_HOME 的作用:
- 1). PATH 环境变量作用是指定命令搜索路径, 在 i 命令行下面执行命令如 javac 编译 java 程序时, 它会到 PATH 变量所指定的路径中查找看是否能找到相应的命令程序我们需要把 jdk 安装目录下的 bin 目录增加到现有的 PATH 变量中, bin 目录中包含经常要用到的可执行文件如 javac/java/javadoc 等待, 设置好 PATH 变量后, 就可以在任何目录下执行 javac/java 等工具了
- 2). CLASSPATH 环境变量作用是指定类搜索路径, 要使用已经编写好的类, 前提当然是能够找到它们了, JVM 就是通过 CLASSPTH 来寻找类的我们需要把 jdk 安装目录下的 lib 子目录中的 dt.jar 和 tools.jar 设置到 CLASSPATH 中, 当然, 当前目录. 也必须加入到该变量中
- 3). JAVA_HOME 环境变量它指向 jdk 的安装目录, Eclipse/NetBeans/Tomcat 等软件就是通过搜索 JAVA_HOME 变量来找到并使用安装好的 jdk
(二) 实验总结
实验内容:
1. 看商品猜价格及题目扩展
- 设计思路
- 首先利用随机数得到商品的价格, 利用循环控制用户猜价格的次数, 定义一个变量保存用户每次猜价格的得分, 再定义一个新的变量保存用户多次猜价格累计的分数, 在一轮猜价格的最后输出商品的价格, 游戏结束时输出用户的总得分和猜价格的次数
- 注意
- 因为用户输入是否继续游戏指令时是使用字符串类型定义的, 所以在比较商品价格大小的时候不能用 ==, 要是用 String 类的 equals 方法 str.equals(str1 );
2. 万年历
设计思路
1) 编写一个方法判断闰年
2) 根据某年是闰年还是平年编写一个方法判断某年某月有多少天
3) 编写一个方法计算某年某月之前距离 1900 年 1 月有多少天因为每个月的天数都会不一样, 所以要分别判断某月的天数后再计算距离 1900 年 1 月的总天数
4) 编写一个方法输出某年某月的日历已知一个判断星期几的方法: 1+totaldays%7 的值为 1-7 时分别为星期一到星期日
问题
1) 输出日历判断是否换行时, 要利用距离 1900 年 1 月和 7 的关系即 1+totaldays%7=? 值为 7 时换行
3. 评分系统
设计思路
1) 用一个二维数组存放每个评委给每个选手的得分
2) 分别用一维数组表示每个选手的最高分, 最低分, 和去掉一个最高分一个最低分的平均分
3) 使用冒泡 排序法对二维数组的行从高到低排序, 得到每一行的最大值最小值分别存放在表示最高分和最低分的一维数组中
4) 利用循环分别计算每个选手的最终得分, 存放在平均分数组中
5) 按照从高到低的顺序分别输出每个选手的得分和每个选手的平均分
问题
1) 使用冒泡排序法对二维数组排序是要注意数组越界的问题
2) 利用三层循环对二维数组排序, 第一层循环改变行, 把二维数组的每一行当做一个一维数组在第二层和第三层循环中使用冒泡排序法对二维数组的每一行排序
(三) 代码托管
码云提交历史截图
来源: http://www.bubuko.com/infodetail-2530423.html