zoukankan      html  css  js  c++  java
  • Java第一次实验作业

    一.学习总结
    1.在java中通过Scanner类完成控制台的输入,查阅JDK帮助文档,Scanner类实现基本数据输入的方法是什么?
    Scanner in =new Scanner(System.in);
    int input =in.nextln;
    输入的数据保存在in中,要用Scanner,需要提前声明import java.util.Scanner,Scanner对于输入的类型没有限制(在java允许的范围内),对这些数据进行输出就要对以储存的数据进行转换后才能输出。
    获取基本类型数据的方法是:
    nextInt() :读取整型数据
    nextDouble() :读取双精度数据
    next():读取输入的下一个单词(空格作为分隔符)
    nextLine():读取输入的 下一行内容
    实例:
    ...

    package suiti;
    import java.util.Scanner;
    public class suiyi {
     public static void main(String[] args) {
    	 Scanner in =new Scanner(System.in);
    	 int input=in.nextInt();
    	 System.out.print("请输入数据:");
    	 System.out.println("请输出数据:"+input);
    	// TODO Auto-generated method stub
    
    }
    }
    

    ...

    2.Random类和Math类的random()方法都能产生随机数,这两种方式有什么区别,各有什么特点呢?
    Random类给定一个范围,就可以产生几到几之间的随机数。例如:nextInt(100)就是产生一个0~100之间的整形的数(包括0,不包括100),nextFloat()就是产生从0.0到1.0之间的小数。
    产生0至100之间的整数:
    ...

    package random;
    import java.util.Random;
    public class L2 {

    public static void main(String[] args) {
    	Random rand=new Random();
    	int x=rand.nextInt(100);
    	System.out.println(x);
    	// TODO Auto-generated method stub
    
    }
    

    }

    ...

    Math类的random()产生0~1之间double类的随机数。
    产生0至100之间的整数:
    ...

    package random;

    public class L1 {

    public static void main(String[] args) {
    	int x=(int)(Math.random()*100);
    			System.out.println(x);
    	// TODO Auto-generated method stub
    
    }
    

    }

    ...

    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");
    }
    }
    }

    ...


    原因:浮点数类型在运算时有极小误差。
    改正:
    ...

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

    ...

    4.本次学习要点中其他需要总结的内容:
    (1)定义Scanner类是前面需要声明import java.util.Scanner;
    (2)类名称需要大写,并且有意义;
    (3)类中所有的方法最好不要输出;
    (4)输出语句中字符串的链接用“+”;
    (5) System.out.println输出后不用换行, System.out.print输出后需要换行;

    (二)实验总结
    实验内容:
    1.看商品猜价格

    程序设计思路:(1)最多猜5次,所以要用到for循环(i作为控制变量),每次需要给出是猜大了还是猜小了,所以要用if来进行判断,还有几次猜数机会,可以用5-i来控制;
    (2)第几次猜中得多少分,可以用switch case来得到;
    (3)一轮游戏结束后,让用户自己选择是继续还是退出,要用到字符串的比较,字符串的比较用到的是equals方法;
    (4)游戏整个结束后,显示猜了几次,总得分,用到求和运算;
    (5)把以上整个小步骤整合到一起就ok了。
    package 猜数2;
    import java.util.Scanner;
    import java.util.Random;
    public class Caishu2 {

    public static void main(String[] args) {
    Scanner input=new Scanner(System.in);
    String str1="yes";
    System.out.println("是否开始游戏?yes or no");
    int zongfen=0;
    while(true) {

    String str=input.next();
    if(str1.equals(str)) {
    Random suiji=new Random();
    int suiji2=suiji.nextInt(100)+1;
    int i;
    for(i=1;i<=5;i++) {
    int price=input.nextInt();
    int n=5-i;
    if(price>suiji2) {
    System.out.println("猜大了,你还有"+n+"次猜数的机会");
    }
    else if(price<suiji2) {
    System.out.println("猜小了,你还有"+n+"次猜数的机会");
    }
    else {
    System.out.println("猜中了");
    break;
    }
    }
    int score=0;
    switch(i){
    case 1:score=100;break;
    case 2:score=80;break;
    case 3:score=60;break;
    case 4:score=40;break;
    case 5:score=20;break;
    case 6:score=0;break;
    }
    System.out.println("score="+score+" 正确的价格为:"+suiji2);
    zongfen+=score;
    }
    else {
    break;
    }
    System.out.println("是否继续游戏?yes or no?");
    }
    System.out.println("总分="+zongfen);
    // TODO Auto-generated method stub

    }

    }

    出现的问题:字符串的比较,还有循环中有一些小问题,不过拿上就改正了。

    2.万年历

    程序设计思路:(1)编写一个方法判断闰年:就是结余4等于0并且结余100不等于0或者结余400等于0;
    (2)编写方法判断某年某月有多少天:switch case语句,闰年的2月有29天,平年的2月有28天;
    (3)编写方法计算某年某月之前距离1900.1.1有多少天:比如输入2018.3,求出1900到2017年的天数,再加上2018年的1月和2月的天数。用for循环;
    (4)打印一个月的日历:总天数结余7再加1就等于下一月的第一天是周几,每7天就要有回车输出;

    问题:(1)switch case运用不熟练---查书之后解决;
    (2)打印的时候没有思路---问同学解决;
    import java.util.Scanner;
    public class Shiyan1 {
    public static void main(String[] args) {
    Scanner in=new Scanner(System.in);
    System.out.println("请输入年份和月份:");
    int year=in.nextInt();
    int month=in.nextInt();
    int s;
    s=totalDays(year,month);
    System.out.println("总天数为:"+s);
    System.out.printf("此年此月的天数 %d ", days(year,month));
    printCalender(year, month);

    }
    public static boolean isleap(int year){
    	if(year%4==0&&year%100!=0||year%400==0){
    	   return true;
    	}
    	else{
    		return false;
    	}
    }
    public static int days(int year,int month){
    	int day=0;
    	switch(month){
    	case 2:if(isleap(year)){day=29;}
    	        else{day=28;}break;
    	case 1:
    	case 3:
    	case 5:
    	case 7:
    	case 8:
    	case 10:
    	case 12:day=31;break;
    	case 4:
    	case 6:
    	case 9:
    	case 11:day=30;break;
    	}
    	return day;
    }
    public static int totalDays(int year,int month){
    	int zyear=0,i,x,zday=0;
    	int zmonth=0;
    	for(i=1900;i<year;i++){
    		if(isleap(i)){
    			x=366;
    		}
    		else{
    			x=365;
    		}
    		zyear+=x;
    	}
    	for(i=1;i<month;i++){
    		
    		zmonth+=(days(year,i));
    	}
    	zday=zyear+zmonth;
    	return zday;
    }
    public static void printCalender(int year,int month) {
    	int x=totalDays(year,month);
    	int s=1+x%7;
    	int n=0;
    	System.out.println("一	二	三	四	五	六	日	") ;
    	for(int i=1;i<s;i++) {
    	System.out.print("	") ;
    	n++;
    	}
    	int j=days(year,month);
    	for(int k=1;k<=j;k++) {
    	System.out.print(k+"	") ;
    	n++;
    	if(n%7==0) {
    	System.out.println( ) ;
    	}
    	}
    	}
    

    }
    (三)代码托管

  • 相关阅读:
    一个神奇的类库,可以执行字符串表达式
    Common lang一些边界方法总结(好记性不如烂笔头,需要慢慢积累).一定要利用好现有的轮子,例如Apache common与Google Guava
    借助强大的IDEA开发ide高效实现equals,hashcode以及toString方法
    数字签名是什么?
    字符串组合
    空格替换
    字符串替换 (replace)
    为什么要区分稳定和非稳定排序
    算法稳定性
    华为2018校招技术岗笔试
  • 原文地址:https://www.cnblogs.com/zrx--/p/8578675.html
Copyright © 2011-2022 走看看