《Java技术》第一次作业

Posted 张晓楠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Java技术》第一次作业相关的知识,希望对你有一定的参考价值。

(一)、学习总结
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 Test{
    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和CLASSPATH、JAVA_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)利用三层循环对二维数组排序,第一层循环改变行,把二维数组的每一行当做一个一维数组在第二层和第三层循环中使用冒泡排序法对二维数组的每一行排序。
            (三)、代码托管
    • 码云提交历史截图

以上是关于《Java技术》第一次作业的主要内容,如果未能解决你的问题,请参考以下文章

《Java技术》第一次作业

《Java技术》第一次作业——Java语言基础

201621123062《java程序设计》第九周作业总结

第二周作业

# 《Java技术》第一次作业

长大DeepMind第一次团队作业