代码改变世界

java第一次作业

2017-03-16 16:05  空白格DE  阅读(270)  评论(2)    收藏  举报

《Java技术》第一次作业

(一)学习总结
1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?不能只用文字描述,一定要写代码,通过具体实例加以说明。
java利用scanner类完成控制台的输入,通过scanner函数直接输入参数的形式,来实现输入语句。scanner可以针对任何要处理的文本内容编写自定义的语法分析器,是一种文本扫描器。
例如:

import java.util.Scanner;
public class test{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
System.out.printIn("请输入一个数:");
int length=input.nextInt();
System.out.printIn("输入的数字是:"+length);}
}

2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?查阅JDK帮助文档,并举例加以说明
(1)Random类中实现的随机算法是伪随机,也就是有规则的随机数,Random类中各方法生成的随机数都是均匀分布的。
例如:

import java.util.Random;
public class Ranadd{
public static void main(String[] args){
    int x,y;
    Random n=new Random();
    x=n.nextInt(300-10+1)+10;
    y=n.nextInt(300-10+1)+10;
    System.out.printIn(x+"+"+y+"="+(x+y));
}
}

(2)Math类的random()的方法是生成[0,1)之间的double类型数
例如:

double a=Math.random();

3心得:
刚开始没有注意这几种的区别,也没有刻意的去在意scanner的方法什么的,通过这次的作业我查阅jdk的帮助文档和查询书还有就是上网查询,又知道了好多知识,写上面的例子的时候也是试了很多次才运行成功的,虽然之前写过,但是也是按照书上的例子模仿着写,根本不懂是什么意思,但是通过这次的作业,查到了好多东西,自己也慢慢的懂点了,以后还是多写多练习吧,争取把不会的都搞懂。
(二)实验总结
1.猜价格游戏:
程序设计思路:利用Random 产生随机数,然后利用Scanner类输入要猜的数并初始化为0,当猜的数与随机数不相等,则输入1-100之间的一个数,如果猜的数大于产生的随机数,则提示太大了;如果猜的数小于产生的随机数,则提示太小了;如果猜了10次,则提示输入的太多,游戏结束了。
问题:没有实现无限循环,在刚开始时遇到了输入一个数过大,再输入一个数过小,找不到正好等于随机数的数,后来通过不断地修改,找到了出现问题的地方,紧接着进行修改,调试,运行,一点点的修改,后来实现了功能。

import java.util.Random;
import java.util.Scanner;


public class suijishu{

	public static void main(String[] args) {
		int num=getRandomNumber();
		int count=0;
		Scanner sc=new Scanner(System.in);
		int gussNum=0;
		while(gussNum!=num){
			System.out.println("请输入你猜的数字(1-100)");
			gussNum=sc.nextInt();
			count++;
			if(gussNum>num){
				System.out.println("太大了");
			}
			
			if(gussNum<num){
				System.out.println("太小了");
			}
			if(count==10){
				System.out.println("次数太多,游戏结束");
				break;
			}
		}
		if(gussNum==num){
				System.out.println("猜对了,一共猜了"+count+"次");
                }
			
	}
	public static int getRandomNumber() {
		return new Random().nextInt(100)+1;
	}

2.万年历
设计思路:首先先输入年份和月份,在初始化年份为1900年,在对输入的年份进行闰年还是平年的判断,如果是闰年则为366天,如果是平年则为365天还要对月份进行判断。通过if函数对每个月的天数进行选择。
问题1:每年月份的星期不对
原因1:对年份进行时平年还是闰年的判断有误
问题2:每周的顺序不一样
原因2:没有将周日设置为一周的开始

package com.sxt.test;
import java.util.Scanner;
public class wannianli {
	private static final int RUNNIAN = 0;
	public static void main(String[] args) {
         Scanner s=new Scanner(System.in);
         System.out.println("请输入年份");
         int year=s.nextInt();
         System.out.println("请输入月份");
         int month=s.nextInt();
         printWANNIANLI(year,month);       
	}
	public static void printWANNIANLI(int year,int month){
		System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
		int kongGe=getKongGe(year,month);
		for(int i=1;i<=kongGe;i++){
			System.out.print("\t");
		}
		if(kongGe==7){
			System.out.println();			
		}
		for(int i=1;i<=getDaysOfMonth(year,month);i++){
			System.out.print(i+"\t");
			if((i+kongGe)%7==0){
				System.out.println();
			}
		}
	}
	public static int getKongGe(int year,int month){
		int count=getDaysOfAll(year,month)%7+1;
		return count;	
		}
    public static int getDaysOfAll(int year,int month){
    	int sum=0;
    	for(int i=1900;i<year;i++){
    		if(RUNNIAN(i)==true){
    			sum+=366;
    		}
    		else {
    			sum+=365;
    		}
    	}
    	for(int i=1;i<month;i++){
    		sum+=getDaysOfMonth(year,i);
    	}
    	return sum;
    }
    public static int getDaysOfMonth(int year,int month){
    	int day=0;
    	if(month1(1,3,5,7,8,10,12)){
    		day=31;
    		return day;
    	}
    	if(month2(4,6,9,11)){
    		day=30;
    		return day;
    	}
    	if(month3(2)){
    		if(RUNNIAN(year)==true){
    			day=29;
    		}
    		else{
    			day=28;
    		}
    		}
    	return day;
    	}
    private static boolean month1(int i, int j, int k, int l, int a,int b,int c) {
    	return true;
	}
    private static boolean month2(int m,int n,int f,int r){
    	return true;
    }
    private static boolean month3(int q){
    	return true;
    }
	private static int month(int i) {
		
		return 0;
	}
	public static boolean RUNNIAN(int i){
    	if(i%4==0&&i%100!=0||i%400==0){
    		return true;
    		
    	}else{
    		return false;
    	}
 
    }
}

(三)代码托管
链接:https://git.oschina.net/hebau_cs15/RJ.git


(四)学习进度条

代码行数(新增/累积) 学习时间(新增/累积) 本周学习内容
目标 5000行 300小时
第2-4周 180行 21 学习了scanner类的概念及用法
第5周
第6周

(五)总结
在这次的作业中学习到了布尔型,参考书上的例子以及上网查询实例,自己一点一点尝试着去写,写的过程中程序出现了很多各种各样的问题,比如布尔类型的返回值只能用true和false来实现,这些新的东西之前都没有写过,所以在写的过程中总是会忘记,导致了程序总是无法运行。还有就是写程序的时候,对题目没有理解到位,也是程序运行出来跟老师要求的不一样,后来通过询问同学,不断改正,才写出来。还有很多不知道不会用的函数,所以以后还是多加练习,通过实践一点点掌握。