java第一次作业


一、学习总结

1、在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明。

Scanner类能使用正则表达式之,Scanner类还可以任意地对字符串和基本类型(如int和double)的数据进行分析。
使用该类创建一个对象:Scanner reader=new Scanner(System.in);  
然后reader对象调用下列方法(函数),读取用户在命令行输入的各种数据类型:  
next.Byte(),nextDouble(),nextFloat,nextInt(),nextLine(),nextLong(),nextShot()
实例:  

import java.util.Scanner; 
public class Test {
    public static void main(String []args){ 
    Scanner s=new Scanner(System.in); 
    int a=s.nextInt(); 
    int b=s.nextInt(); 
    System.out.println(a+b); 
    } 

}

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

  • Random类:
    • java.util.Random类中实现的随机算法是伪随机,也就是有规则的随机,所谓有规则的就是在给定种(seed)的区间内随机生成数字;
    • 同种子数的Random对象,相同次数生成的随机数字是完全相同的;
    • Random类中各方法生成的随机数字都是均匀分布的,也就是说区间内部的数字生成的几率均等;
      例如:
import java.util.Random;//导入Random包
public class Test{
    public static void main(String[] args){
        int x,y;
        Random ins=new Random();//实例化一个random的对象ne
        x=ins.nextInt(100);//为两变量赋随机值
        y=ins.nextInt(100);
        System.out.println(x+"+"+y+"="+(x+y));
    }
}
  • Math类的random()
    • Math的random方法就是调用的Random类的nextDouble()方法,Math类的random方法使用较方便,不需要导包、创建对象。
    • public static double random()返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。返回值是一个伪随机选择的数,在该范围内(近似)均匀分布。
      例如:
double a=Math.random();//产生一个随机数给a 
int b=(int)(1+Math.random()*(10));//产生一个1-10的数给b

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

  • 编写java程序时需要较好的逻辑思维,学习C语言给java做了铺垫,java程序可以根据C语言的逻辑思维写,但是其中表达方法有些不同。
  • 在写万年历程序中,当输入不合法月份时,出现太多行的提示“你输入的不合法”,尚未解决。

二、实验总结

1、猜字游戏

  • 程序设计思路:
    - 先创建一个主函数。
    - 里面写一个while循环来循环猜数(循环终止条件为false)当用户输入退出时循环的判断变量变为false;
    - 在while循环里,用Random类随机取每次的猜测值,还调用了返回值为一个数组(包含每个值所猜测的次数和猜测得分)的子函数,每猜测一个值将两项分别累加;
    - 最后用户输入退出后输出猜测总次数和总得分。
    - 再写一个返回值为数组的子函数。
    - 子函数中用for循环控制了每次只能猜测5次;
    - 循环中用if、elseif、else 三种判断语句分别表示猜大、猜小、猜对三种情况;
    - 当用户猜测五次后仍未猜对,这时在猜大和猜小情况中输出所猜数字的值。当用户猜对时,调用了算成绩的子函数,并将控制循环结束变量i赋值为5来结束循环;
    - 最后再将次数和成绩赋值到一个数组中并返回值。
    - 最后写一个算每次的成绩的子函数。
    - 用switch语句分别表示第一次,第二次·····第五次猜测对的成绩并返回值。
  • 问题1:while循环中括号里用1或0判断发现不对。
  • 原因:java中whlie循环判断变量不能为int型,必须为boolean型。
  • 解决方案:看了所给的提示,定义了一个boolean类型的变量用true和false来判断继续和终止。
  • 问题2:在子函数中,用将参数的地址传过来的方法返回两个值的方法不对。
  • 原因:java中不能像C语言中一样的方法传递参数的地址。
  • 解决方案:用了万能的百度,找了一下子函数返回两个值的方法。
    • 方法:先定义一个存放两个值的数组,后将两个要返回的值复制给数组并返回。部分代码如下:
int Sums[]=new int[2];
......
Sums[0]=n;
Sums[1]=sum;
return Sums;

2、判断星期几,打印万年历

  • 程序设计思路:
    • 先创建一个主函数。
      • 主函数中输入年份、月份和日期;
      • 调用判断输入的日期是星期几的函数;
      • 调用输出该月万年历的函数。
    • 创建一个判断是否为闰年的子函数。
      • 用if、else语句判断是否为闰年并返回true或false。
    • 创建一个判断某年某月有多少天的子函数。
      • 用if、else类语句分别表示出闰年2月、平年2月、31天的月份、30天的月份,并将该月的天数赋值并返回。若都不符合以上条件就输出不合法返回0;
      • 这里直接调用判断闰年的函数。
    • 创建一个计算某年某月之前距离1900年1月1日的总天数的子函数。
      • 先用for双层循环得到1900年距该年的上一年总天数;
      • 再将该年中该月以上的几个月天数累加;
      • 最后将总天数返回。
      • 此子函数调用了某年某月有多少天的子函数,用来将该年与1900年之间的每年的每个月份天数加和。
    • 创建一个判断该天是星期几的子函数。
      • 用(day+totalDays(year,month))%7求出余数;
      • 再用switch语句分别表示余数所对应的星期几(用String类定义了一个变量来存放星期几);
      • 最后输出改日期是星期几。
    • 创建打印万年历的子函数。
      • 先将星期一到日打印;
      • 再求出该月一号是星期几,用来定位该月一号对应星期几;
      • 定位一号对应星期几后,打印出一号之后的日期(这里调用了该年该月有几天的子函数),每当输出到星期日后输出一个回车;
  • 问题1:写计算某年某月之前距离1900年1月1日的总天数子函数时,发现与判断某年某月有多少天的子函数有相同的地方。
  • 原因:逻辑思维没搞好。
  • 解决方案:重新写此子函数并调用判断某年某月有多少天的子函数,看起来更简便。
  • 问题2:在输出改天为星期几时,有的日期对应的星期几输不对。
  • 原因:忘记考虑(day+totalDays(year,month))%7余数为0时是星期日的情况。
  • 解决方案:在swiech语句中加入余数为0的情况。
  • 问题3:在打印该月的万年历时,每个日期都有回车,成了一列的形式。
  • 原因:未考虑到System.out.println();是输出内容就会打印一个回车。
  • 解决方案:将System.out.println();中println改为了print。

三、代码托管

  • 码云commit历史截图
    上传实验项目代码到码云,在码云项目中选择“统计-commits”,设置搜索时间段,搜索本周提交历史,并截图,同时应该给出git项目的链接。
    git项目的连接:

https://git.oschina.net/hebau_cs15/Java-CS01LXC.git



四、学习进度条

填写本周学习进度条。为自己设定本学期的目标,包括预计完成的代码行数,预计花多少时间在Java课程的学习上。记录自己每周完成的情况,填写下列的进度条,务必实事求是。

代码行数(新增/累积) 学习时间(新增/累积) 本周学习内容
目标 5000行 300小时
第2-4周 200/200 20/20 学习了java基础一二章
第5周
第6周

posted @ 2017-03-18 23:21  暖心物语  阅读(356)  评论(2编辑  收藏  举报