Java作业(1)

(一)学习总结
1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明。
Scanner.的用法主要有以下的几种方法
1.Scanner.nextLine(); //读取下一行(包括空格,tab等)
2.Scanner.next()😕/String
3.Scanner.nextInt()😕/int
4.Scanner.nextFloat()//float
5.Scanner.nextBoolean()//boolean
6.Scanner.nextDouble()//double
7.Scanner.nextByte()//byte
8.Scanner.nextShort()//short
9.Scanner.char b =s.next().charAt(0);//char

以代码的方式位

...

package shuru;
import java.util.Scanner;
public class shuru {

public static void main(String[] args) {
	// TODO Auto-generated method stub
		Scanner input=new Scanner(System.in);
	String a =input.nextLine();//读取下一行(包括空格,tab等)
	System.out.println(a) ;
	String b =input.next();//String
	System.out.println(b) ;
	int c =input.nextInt();//int
	System.out.println(c) ;
	float d=input.nextFloat();//float
	System.out.println(d) ;
	boolean e=input.nextBoolean();//boolean  
	System.out.println(e) ;
    double f=input.nextDouble();//double
    System.out.println(f) ;
    byte g=input.nextByte();//byte
    System.out.println(g) ;
    short h=input.nextShort();//short
    System.out.println(h) ;
    char i =input.next().charAt(0);//char
    System.out.println(i) ;
}

}

...

运行结果

2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?查阅JDK帮助文档,并举例加以说明。

答:
Math.random()返回的只是从0到1之间的小数,如果要50到100,就先放大50倍,即0到50之间,这里还是小数,如果要整数,就强制转换int,然后再加上50即为50~100.
最终代码:(int)(Math.random()*50) + 50
Random类产生的随机数,在其最大值范围内,按照概率均匀分布的。也就是说,两个种子数相同的Random对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同。
以下程序都是产生0-50的随机数

...

    package suijishu;
    import java.util.Random;
    public class suijishu {

public static void main(String[] args) {
	Random rand=new Random() ;
	int x=rand.nextInt(100)+1 ;
	double  y=Math.random()*50;
	int z=(int)(Math.random()*50); 
	System.out.println(x) ;
	System.out.println(y) ;
	System.out.println(z) ;
	}

}

...

运行结果 x 是0-49的整数,y是0-50的双精度小数,z是0-50的整数。
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");
        }
    }     
}

为了处理精度损失的问题,可以使用java.math.BigDecimal类,查阅JDK帮助文档或教材p378,对上述程序进行修改。

答:程序运行结果是:不等于0.3
原因:在Java使用分数和指数来表示浮点类型的数据时,在加减的过程中,产生了浮点型误差,不能使用“==”来比较浮点类型数据的运算结果。

...

package test;
import java.math.BigDecimal;
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);
    BigDecimal  d = new BigDecimal(1);
    System.out.println(a.add(b).add(c));
    
    if(a.add(b).add(c).divide(d,2,BigDecimal.ROUND_HALF_UP).doubleValue()==0.3){
        System.out.println("等于0.3");
    }else {
        System.out.println("不等于0.3");
    }
}     

}

...

4.本次学习要点中其他需要总结的内容:因人而异,根据自己的学习情况,记录难掌握或难理解的内容,以及学有心得的内容。还存在哪些问题,也可以提出来,对于同学在博客中提出的问题,大家可以积极讨论,互帮互学。
1.数组中的定义的double类型的运算,时常忘记类型的转换
2.运用方法时,变量的声明混乱,为了方便把上面的方法复制下来,把里面上次的变量也带了下来,而第二次的带入的方法不跟第一次一样,在最后检查错误的时候,反而浪费时间。
3.数组的长度用 数组名.length ,二维数组的一维空间长度 数组名[ 行数].length。
4.“”只能进行数的比较,字符串的比较不能用,要用equal方法。若用”“比较,比较的是地址。
(二)实验总结

  1. 题目要求:
    程序设计思路:
    1.首先声明import java.util.Scanner,import java.util.Random.以便于键盘的输入和随机数的产生。
    2.先建立String字符串str1=“yes”,以便于用户选择是否继续进行的标准。
    3.设计Price方法,用Random来建立随机价格。
    4.运用while循环,次数从5开始递减,Scanner来读写用户所输入的价格
    (1)如果猜的价格比真正的价格高,提示价格高,那么进行下一次输入。再进行i--;
    (2)如果猜的价格比真正的价格低,提示价格低,那么进行下一次输入。再进行i--;
    (3)如果猜的价格和真正的价格一样,结束循环。
    (4)若i=0结束竞猜,退出循环。
    5.对i的值进行比较,分别给出100,80,60,40,20,0分的判定。
    6.提示是否进行游戏,输入的字符串与str1比较,其中引用equal方法比较。
    (1)若相等,则继续重新从2.项开始循环。
    (2)若不想等,则退出。
    7.输出总得分和总次数。
  2. 题目要求:
    程序设计思路:
    1.设计布尔型方法isLeap来判断年份是闰年还是平年。
    2.设计整型方法days来判断月份的天数,其中2月的天数是29还是而是28,引用1的isLeap方法。
    3.设计整形方法totalDays来计算从1900年到所输入年份月份的一号之前有多少天。其中天数的运算引用了days方法判断月份之前的天数,以及引用isLeap方法来计算1900年到输入年份之前的天数。
    4.在3中计算的总天数结余7再加1,来判断所输入年份月份的第一天是星期几,利用制表符和for循环来输出日历,其中月份的天数再次引用days方法。
  3. 题目要求:
    程序设计思路:
    1.设计了两种评分的方法。一种是随机数输入,一种是手动输入。
    (1)随机数输入是声明Random,产生随机数填入score数组。
    (2)手动输入是靠Scanner进行键盘的输入。
    2.把数组的每行都进行选择排序,把最高分放到数组的最后位置。
    3.把数组的每行都进行选择排序,把最低分放到数组的倒数第二位置。
    4.把数组的每行的前八个分数进行平均分运算,再放到score1数组中。
    5.把score数组的分数进行冒泡排序,输出分数排行榜。
    托管:
posted on 2018-03-18 00:19  王国宇  阅读(208)  评论(0编辑  收藏  举报