实例1-4判断闰年,接收输入,员工分配,重定向输出流

/ java精彩编程200例 / 1 条评论 / 129浏览

java精彩编程200例的书终于到了,小菜鸡码代码喽!
实例1-4比较简单所以今天直接全搞了,说真的这四个推荐看的是实例1的扩展学习和实例4,其他如果您有时间那么都看了叭,嘻嘻嘻。废话不多说,直接上代码。
实例001.判断某一年是否为闰年

这个还阔以呦,难度不大。
package java01;
import java.util.Scanner;

public class LeapYear {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入一个年份:");
        int year = scan.nextInt();

        if (year%4 == 0 && year%100 != 0 || year%400 == 0) {
            System.out.println(year+"是闰年!");        
        }else {
            System.out.println(year+"不是闰年!");
        }
    }
}

扩展学习

判断指定日期间经过的天数

思路:两个日期特殊的地方无非为是否为同一年,是否为闰年。计算方式是先算整年的天数[小日期年,大日期年),然后减去(大日期天数-小日期天数)注意:这么减出现负数没关系,前边算整年天数的时候算多的天数正好和这里的减负的天数抵消,真的巧妙啊!我表达能力不强,感觉越说越迷,还是看代码吧,你绝对没见过这么详细的注释,因为我发现写注释是也是对代码的一种加深理解,嘻嘻嘻。

虽然实例001很简单,但是它的扩展还是有点东西的,对于我这个初学者来说。(手动擦汗)

package java01;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class DayNum { public static void main(String[] args) {

    //通过Scanner类从键盘得到两个日期
    System.out.print("请先输入一个小的日期:");
    Scanner date = new Scanner(System.in);
    String  date01 = date.nextLine();    
    System.out.print("请再输入一个大的日期:");
    String  date02 = date.nextLine();

    //确定日期格式:2019-3-8
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd");

    //捕获异常        
    try {
        //把先前输入的两个String类型日期用前面定义的format格式prase解析成Date类型
        Date date001 = format.parse(date01);
        Date date002 = format.parse(date02);

        //两个Date类型变量就可以调用differentDays类的differentdays方法啦!
        /*
            那为什么不可以直接把String型转为Calendar呢,
            这样不就省下了String转Date,然后Date转Calendar了吗。。
            好吧,貌似是必须用Date过渡解析
        */
        System.out.println("两个日期差距:"+differentDays.differentdays(date001, date002));
    } catch (Exception e) {
        //printStackTrace():在命令行打印异常信息在程序中出错的位置及原因
        e.printStackTrace();
    }
}

}

//为练习面向对象的思想,特地创建了个新类 class differentDays{ //类中方法的参数为Date类 public static int differentdays(Date date1,Date date2){

    //将两个Date    变量转换成日历calendar变量,从而便于日期计算    
    Calendar cal1 = Calendar.getInstance();//获取当前时间
    cal1.setTime(date1);        
    Calendar cal2 = Calendar.getInstance();
    cal2.setTime(date2);

    //通过Calendar的get方法确定两个日期分别所含天数
    int day1 = cal1.get(Calendar.DAY_OF_YEAR);
    int day2 = cal2.get(Calendar.DAY_OF_YEAR);

    //通过Calendar的get方法确定两个日期分别所在年份
    int year1 = cal1.get(Calendar.YEAR);
    int year2 = cal2.get(Calendar.YEAR);
    if (year1 != year2) {//不在同一年

        //此变量用于记录两日期相差的整年天数
        int timeDistance = 0;
        for (int i = year1; i < year2; i++) {

            //判断是否为闰年,闰年366天,否则355天
            if (i%4 == 0 && i%100 != 0 || i%400 == 0){    
                timeDistance += 366;
            }else {
                timeDistance += 365;
            }
        }            
        /*
            下面这个ruturn很关键  保证了相差不足一年时的运算正确性
            如:2017-12-31和2018-1-1
            即为:365-(1-365)=1
            就算是闰年也一样
        */
        return timeDistance+(day2-day1);
    }else {//在同一年时,直接两个天数相减
        return day2-day1;
    }
}    

}


实例002.从控制台接收输入的身份证号

emmmmm建议跳过.......

package java02;
import java.util.Scanner;

public class idcard {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你的身份证号:");
        String line = scanner.nextLine();
        System.out.println("原来你的身份证号码是:"+line.length()+"位数字啊");
    }
}


实例003.为新员工分配部门

哈希码~~好高大上的样子......好叭也就这样嘛(其实确实很高级,目前不得其中要领)

package java03;
import java.util.Scanner;

public class fenpei { public static void main(String[] args) { Scanner scan = new Scanner(System.in); Scanner scan2 = new Scanner(System.in); System.out.println("请输入员工的姓名:"); String name = scan.nextLine(); System.out.println("请输入新员工应聘的编程语言:"); String language = scan2.nextLine();

     switch (language.hashCode()) {
        case 3254818:   //java的哈希码
        case 2301506:   //java的哈希码
        case 2269730:   //java的哈希码
            System.out.println("员工"+name+"被分配到java程序开发部门");
            break;
        case 3104:      //c#的哈希码
        case 2112:      //c#的哈希码
            System.out.println("员工"+name+"被分配到c#项目维护组");
            break;
        case -709190099://ASP.NET的哈希码
        case 955463181: //ASP.NET的哈希码
        case 9745901:   //ASP.NET的哈希码
            System.out.println("员工"+name+"被分配到ASP.NET程序测试部门");
            break;
        default:
        System.out.println("本公司不需要"+language+"语言的开发人员");
    }
}

}


实例004.重定向输出流实现程序日志

System类中out成员变量是Java的标准输出流,程序常用它来输出调试信息,out被定义为final型,无法直接重新复制,但可以通过setOut方法来设置新的输出流,从而实现输出流的重定向(我迷了=_=)

本实例把它重定向指向了一个文件输出流,从而实现了日志功能。

package java04;
import java.io.PrintStream;

public class reout { public static void main(String[] args) { try { //重新分配System类的标准输出流 out:新的PrintStream输出流对象 //保存源输出流到out中 PrintStream out = System.out; //创建新的文件输出流 PrintStream ps = new PrintStream("./log.txt"); //重新分配System类的标准输出流 ps:新的PrintStream输出流对象 System.setOut(ps); int age = 21; System.out.println("年龄变量成功定义,初始值为21"); String sex = "男"; System.out.println("性别变量成功定义,初始值为男"); //整合两个变量 String info = "这是个"+sex+"孩子,应该有"+age+"岁了。"; System.out.println("整合两个变量为info字符串变量,其结果是:"+info); //恢复原有输出流
//可不可以比喻成 借你笔写了一篇文章,写完又还回去
//你的笔还是你的笔 我借用的时候你就先别用了(手动滑稽..) System.setOut(out); System.out.println("程序运行完毕,请查看日志文件。"); } catch (Exception e) { //printStackTrace():在命令行打印异常信息在程序中出错的位置及原因 e.printStackTrace(); } } }


总结:我懂得真少....得快点学了,io还不懂搞毛(心酸酸)

  1. 到此一游,点赞

    回复