《Java技术》第一次作业

(一)学习总结
1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明。
java.util.Scanner类是一个用于扫描输入文本的应用程序,可以结合使用正则表达式和从输入流中检索特定类型数据项的方法,除了使用正则表达式,还可以对字符串和基本数据类型进行分析。最主要的功能就是获取控制台输入。
nextbyte():输入字节数
nextInt ():输入整数
nextFloat():输入浮点数
nextDouble():输入双精度浮点数
字符串的输入:
nextLine():可输入Enter前所有字符 △
next():不能输入带空格 的字符串 △
程序如下:

import java.util.Scanner;
public class Tese4 {
public static void main(String[] args){ 
int i=0; float f=0.0f;
Scanner scan=new Scanner(System.in);  //从键盘接受数据
System.out.print("输入数据:");
String str=scan.nextLine();
    System.out.println("输入的数据为:"+str); //字符串
    System.out.print("输入整数:");
    if(scan.hasNextInt()){  //判断输入的是否是整数
        i=scan.nextInt();
        System.out.println("整数数据:"+i);
    }else{
        System.out.println("输入的不是整数!");
    }
    System.out.print("输入小数:");
    if(scan.hasNextFloat()){   判断输入的是否是小数
        f=scan.nextFloat();
        System.out.println("小数数据:"+f);
    }else{
        System.out.println("输入的不是小数!");
    }
    }
}

2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?查阅JDK帮助文档,并举例加以说明。
Random类产生的随机数属于伪随机数,所进行的取值是在其取值范围内均匀分布的。只要种子数相同,每一次生成的随机数一定是相同的。
Math.random()生成的随机数是真正意义上的随机数,但该语法只能生成0到1之间的小数,在实际应用是要对其进行放大和转换。
程序如下:

import java.util.Random;
public class Tese4 {
    public static void main(String args[]){
    
        System.out.println( "input" );
        Random r=new Random();
        System.out.println(r.nextInt(100));
        int x=(int)(Math.random()*100);
        System.out.println(x);
    }
}

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;
public class Tese4 {
    public static void main(String[] args){ 
        BigDecimal a=new BigDecimal(0.1+"");
        BigDecimal b=new BigDecimal(0.1);
        BigDecimal c=new BigDecimal(0.1+"");
    
        System.out.println( b );
        System.out.println( c );
        if( a.add(b).add(c).doubleValue() == 0.3 ){
          System.out.println("等于0.3");
       }else {
          System.out.println("不等于0.3");
        }
    }     

}

运行结果:
0.1000000000000000055511151231257827021181583404541015625
0.1
等于0.3

4.本次学习要点中其他需要总结的内容:因人而异,根据自己的学习情况,记录难掌握或难理解的内容,以及学有心得的内容。还存在哪些问题,也可以提出来,对于同学在博客中提出的问题,大家可以积极讨论,互帮互学。

多次向他人请教问题,发现自己不能灵活学习新的知识,不能熟练掌握已学知识。今后要多提高自己动手操作能力,并与别人交流学习成果,取得进一步的提高。
(二)实验总结
实验内容:
1.看商品猜价格
程序设计思路:
首先得到随机价格,然后输入要竞猜的价格(最多可试10次),将两者进行比较,若相等,则输出猜对了和价格,否则输出猜大或猜小了,若10次都没猜对,提示失去机会。
问题:
没有对Scanner进行导入java.util包,总是提示错误
解决方案:
查书巩固知识
2.万年历
程序设计思路:
输入年份月份,判断是否闰年,计算该月总天数,计算距离1900年1月共有多少天,用计算得到的距离数取余7+1,即得到输入某年份的当月1号为星期几,输出该月万年历。
问题:
对每个方法的调用存在疑问,并且最后输出万年历的printCalender函数,输出格式总不正确
解决方案:
向他人求教,发现把totalDays % 7 + 1理解错了,此表达式计算出的是上个月月末的星期数!!
3.评分系统
程序设计思路:
随机产生小于10的随机数十个,因为有5个评委,固定义了一维数组长度为5,循环5次,分别计算总和,最大值,最小值,并查书用了"java.Arrays.sort(数组名称)"对数组进行排序输出,平均值为总值除8.
问题:因为基础比较差,不能清晰理解二维数组,所以此程序在一维数组的基础上加了循环,今后会重新学习二维数组,并在今后的程序中进行实际操作。
解决方案:扎实基础

码云提交历史截图:
1256165-20180318211532538-687323047.png

转载于:https://www.cnblogs.com/J9810/p/8578678.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值