Java第一次作业
《Java技术》第一次作业
(一)学习总结
1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?
Scanner 控制台的输入导入import java.util.Scanner工具类
实例化
Scanner input=new Scanner(System.in)
引用方法
int score=input.inxtint();
2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?
Random类是一个工具类(java.util.Random),里面含有很多方法。
Math类的random此方法是完全同步的,可允许多个线程使用而不出现错误。但是,如果许多线程需要以极高的速率生成伪随机数,
那么这可能会减少每个线程对拥有自己伪随机数生成器的争用。
3.JDK,JVM,JRE的作用与关系
利用JDK开发了属于我们自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码。
4.PATH和CLASSPATH的作用
PATH环境变量作用是指定命令搜索路径,在执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。
我们需要把jdk安装目录下的bin 目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java等待,设置好PATH变量后,
就可以在任何目录下执行javac/java等工具了。
CLASSPATH环境变量。作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPTH来寻找类的。
我们需要把jdk安装目录下的lib子目录中的 dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。
(二)实验总结
1.猜数游戏
-
程序设计思路:
(1)首先导入俩个类Random;Scanner,使程序产生一个1-100的随机数,另外书写用户输入格式package guess; import java.util.Random; import java.util.Scanner; public class Guess{ /** * @param args */ public static void main(String[] args) { while(true){ //新建一个随机数产生器,然后产生一个1-100的整型数值 Random random= new Random(); int num= random.nextInt(100); Scanner input=new Scanner(System.in); System.out.println("请输入1个100以内的整型数值:"+"本次游戏您有5次机会"); int use= input.nextInt();
(2)用户猜测过程,用while循环嵌套if判断语句,得出use与num的大小同时让次数递减
if(use>num)
{
System.out.println("很遗憾您输入的价格太大了,您还有"+(5-k)+"次机会,");
}else
{
System.out.println("很遗憾您输入的价格太小了,您还有"+(5-k)+"次机会,");
}
k++;
if(k==6)
{
break;
}
System.out.println("请输入1个100以内的数字:");
use = input.nextInt();
(3)用户猜测成功,用switch()case语句得出猜对得分情况并且格式化输出成绩与次数
if(k<=5)
{
switch(k){
case 1:score=100;
System.out.print("你猜对了,商品的价格是:"+num+"元"+"你猜的次数为:"+k+"次"+","+score+"分");
break;
case 2:score=80;
System.out.print("你猜对了,商品的价格是:"+num+"元"+"你猜的次数为:"+k+"次"+","+score+"分");
break;
case 3:score=60;
System.out.print("你猜对了,商品的价格是:"+num+"元"+"你猜的次数为:"+k+"次"+","+score+"分");
break;
case 4:score=40;
System.out.print("你猜对了,商品的价格是:"+num+"元"+"你猜的次数为:"+k+"次"+","+score+"分");
break;
case 5:score=20;
System.out.print("你猜对了,商品的价格是:"+num+"元"+"你猜的次数为:"+k+"次"+","+score+"分");
break;
}
}
(4)用户猜测失败,格式化打印失败输出结果
else
{
System.out.println("以上5次都没有猜中,您已经猜测失败了");
System.out.println("商品的价格是:"+num+"元,你的得分为"+0+"分");
}
- 实验问题分析:
问题:在编写过程中双引号总是出错
原因:没有辨识清楚常量和变量的实质,C语言基础不牢固
解决方法:常量用双引号标识,变量直接加上就可以了
二.猜数游戏:
- 程序设计思路:
(1)编写一个方法判断闰年
public static boolean isLeap(int year)
(2)编写一个方法判断某年某月有多少天
publiic static int days(int year, int month)
(3)编写一个方法计算某年某月之前距离1900年1月1日的总天数
public static int totalDays(int year, int month)
(4) 判断具体某天是星期几
public static void week(int year,int month,int day)
{
int sh= (totalDays(year ,month)+day)%7; //取余得到的值1,2,3,4,5,6,0分别代表星期一,二,三,四,无,六,日
switch(sh)
{
case 0:System.out.println("星期日");
break;
case 1:System.out.println("星期一");
break;
case 2:System.out.println("星期二");
break;
case 3:System.out.println("星期三");
break;
case 4:System.out.println("星期四");
break;
case 5:System.out.println("星期五");
break;
case 6:System.out.println("星期六");
break;
}
}
(4)编写一个输出某年某月日历的方法
public static void printCalender(int year, int month)
(5)在main方法中输入年,月,日
public static void main(String[] args)
{
// TODO Auto-generated method stub
Scanner input=new Scanner(System.in);
System.out.println("输入年份");
int year=input.nextInt();
while(year<1900)
{
System.out.println("请重新输入大于1900的年份");
int year1=input.nextInt();
break;
}
System.out.println("输入月份");
int month=input.nextInt();
while(month>12)
{
System.out.println("请重新输入大于0小于12的月份");
int month1=input.nextInt();
break;
}
System.out.println("输入日期");
int day=input.nextInt();
while(day>31)
{
System.out.println("请重新输入大于0小于31的日期");
int day1=input.nextInt();
break;
}
week(year,month,day);
printCalender( year, month);
}
- 实验问题分析:
问题1:开始编写输入值大小判断的时候用的是if语句,但发现程序跳不出去,无法继续执行
原因:没有学透if语句的执行顺序和方式,另外还有break的使用
解决方法:换用while循环加break;程序顺利执行
问题2:方法调用出错
原因:对实参形参以及方法的构成掌握不牢,比如把 week(year,month,day);错写成week(int year, int month,int day);立马报错
解决方法:仔细研究了一下方法的调用,传的是实参,然后掌握了方法调用以及方法定义格式,另外私有方法不能被公有方法调用,静态方法
只能调用static静态方法
问题3:日历打印
解决方法:通过查资料搜索百度得以解决
(三)[代码托管] https://git.oschina.net/hebau_cs15/Java-CS01lxz
-
码云commit历史截图
![]()
(四)学习进度条
| 代码行数(新增/累积) | 学习时间(新增/累积) | 本周学习内容 | |
|---|---|---|---|
| 目标 | 5000行 | 300小时 | |
| 第2-4周 | 300/300 | 30/30 | Scanner, Random |
| 第5周 | |||
| 第6周 |
