三天打鱼两天晒网

1、源代码:package com.first;
import java.util.Scanner;
public class Fishing {
    public static void main(String[] args) {
        boolean flag = true;
        /* 判断所输入的年月日是否正确 */
        while (flag) {
            @SuppressWarnings("resource")
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入年份:");
            int year = scanner.nextInt();
            while (year < 2010) {
                System.out.println("您输入的年份不正确,请重新输入:");
                year = scanner.nextInt();
            }
            System.out.println("请输入月份:");
            int month = scanner.nextInt();
            while (month < 1 | month > 12) {
                System.out.println("您输入的月份不正确,请重新输入:");
                month = scanner.nextInt();
            }
            System.out.println("请输入日期:");
            int day = scanner.nextInt();
            int day0 = getDays(year, month);
            while (day > day0 | day < 1) {
                System.out.println("您输入的日期不正确,请重新输入:");
                day = scanner.nextInt();
            }
            judge(getAllDays(year, month, day));
            System.out.println("是否退出?Y/N");
            String b=scanner.next();
            char c=b.charAt(0);
            if (c=='Y'|c=='y') {
                flag = false;
            }
        }
    }
    /* 判断是否是闰年 */
    public static boolean leapyear(int year) {
        if ((year%4==0&&year%100!=0)||year%400==0){// 能被4整除且不能被100整除,或者能够被400整除的是闰年
            return true;
        }
        return false;
    }
    /* 计算距离输入日期总天数 */
    public static int getAllDays(int year,int month,int day) {
        int sum = 0;
        for (int i=2010;i<year;i++) {
            if (leapyear(i)) {
                sum+=366; 
            } else {
                sum+=365;
            }
        }
        sum+=getCurrentDays(year, month, day);
        return sum;
    }
    /*计算每个月的天数 */
    public static int getDays(int year, int month) {
        int days = 0;
        switch (month) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            days = 31;
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            days = 30;
            break; 
        case 2:
            if (leapyear(year)) {
                days = 29; 
            } else {
                days = 28; 
            }
            break;
        }
        return days; // 返回天数
    }
    /* 计算总天数 */
    public static int getCurrentDays(int year, int month, int day) {
        int sum = 0;
        for (int i=1;i<month;i++) {
            sum+=getDays(year, i);
        }
        return sum+day; // 返回总天数
    }
    /* 判断打鱼还是晒网 */
    public static void judge(int yearday) {
        int day=yearday % 5; 
        if (day>=1&&day<=3) { 
            System.out.println("今天在打鱼"); // 余数为1,2,3,则在打鱼
        } else if (day==4||day==0) { 
            System.out.println("今天在晒网"); //余数为0,4 ,则在晒网
        }
    }
}

2.流程图:

3心得:

       因为上学期自学了一部分Java,所以这次的程序就尝试着用Java来实现,因为老师给了一些思路,所以就更清晰了。第一步就是在主函数里面判断输入的日期是否正确,然后调用函数,计算所输入日期到2010年1月1日一共的总天数,其次就要判断是否为闰年,来判断2月的天数,然后用总天数除以5取余,就能知道是晒网还是打鱼了。写的过程中当然也参考了别人的方法,然后进行了改良,也有很多不懂的问题,都一一解决了。

4、编程风格:

规则1       程序块要采用缩进风格编写,缩进的空格数为4个,不允许使用TAB缩进。

说明:缩进使程序更易阅读,使用空格缩进可以适应不同操作系统与不同开发工具。

 

规则2       分界符(如大括号‘{’和‘}’)应各独占一行,同时与引用它们的语句左对齐。在函数体的开始、类和接口的定义、以及if、for、do、while、switch、case语句中的程序或者static、,synchronized等语句块中都要采用如上的缩进方式。

       示例:

       if (a>b)

    {

        doStart();

    }

 

规则3       较长的语句、表达式或参数(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。

示例:

        if(logger.isDebugEnabled())

        {

           logger.debug("Session destroyed,call-id"

                    +event.getSession().getCallId());

        }

   

 

       

 

规则4       不允许把多个短语句写在一行中,即一行只写一条语句

       说明:阅读代码更加清晰

       示例:如下例子不符合规范。

       Objecto = new Object(); Object b = null;

 

规则5       if, for, do, while, case, switch, default 等语句自占一行,且if, for, do, while,switch等语句的执行语句无论多少都要加括号{},case 的执行语句中如果定义变量必须加括号{}。

       说明:阅读代码更加清晰,减少错误产生

       示例:

       if (a>b)

{

doStart();

}

 

    case x:

{

inti = 9;

}

   

规则6       相对独立的程序块之间、变量说明之后必须加空行。

说明:阅读代码更加清晰

示例:

if(a > b)

{

doStart();

}

//此处是空行

return;

 

规则7       在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如.),后不应加空格。

说明:阅读代码更加清晰

示例:

if (a == b)

{

objectA.doStart();

}

a *= 2;

建议1      类属性和类方法不要交叉放置,不同存取范围的属性或者方法也尽量不要交叉放置。

格式:

类定义

{

    类的公有属性定义

    类的保护属性定义

    类的私有属性定义

    类的公有方法定义

    类的保护方法定义

    类的私有方法定义

}

 

建议2      修饰词按照指定顺序书写:[访问权限][static][final] 。

       示例:

       publicstatic final String str = “abc”;

规则1       源程序注释量必须在30%以上。

说明:由于每个文件的代码注释不一定都可以达到30%,建议以一个系统内部模块作为单位进行检查

 

     

规则2       包的注释:写入一个名为 package.html的HTML格式的说明文件放入包所在路径。包的注释内容:简述本包的作用、详细描述本包的内容、产品模块名称和版本、公司版权。

说明:方便JavaDoc收集,方便对包的了解

示例:

com/huawei/iin/websmap/comm/package.html

 

<html>

<body>

<p>一句话简述。

<p>详细描述。

<p>产品模块名称和版本

<br>公司版权信息

</body>

</html>

 

示例:

<html>

<body>

<P>为WEBSMAP 提供通信类,上层业务使用本包的通信类与SMP-B 进行通信。

<p>详细描述。。。。。。。。

<p>IINV100R001 WEBSMAP

<br>(C)版权所有 2000-2001 华为技术有限公司

</body>

</html>

 

 

规则3       类和接口的注释放在class 或者 interface 关键字之前,import 关键字之后。注释主要是一句话功能简述与功能详细描述。类注释使用“/**  */”注释方式

说明:方便JavaDoc收集,没有import可放在package之后。注释可根据需要列出:作者、内容、功能、与其它类的关系等。功能详细描述部分说明该类或者接口的功能、作用、使用方法和注意事项,每次修改后增加作者和更新版本号和日期,@since 表示从那个版本开始就有这个类或者接口,@deprecated 表示不建议使用该类或者接口。

 

/**

 * 〈一句话功能简述〉

 * 〈功能详细描述〉

 * @author     [作者](必须)

* @see         [相关类/方法](可选)

 * @since      [产品/模块版本] (必须)

 * @deprecated  (可选)

 */

 

示例:

packagecom.huawei.iin.logwebsmap.comm;

 

importjava.util.*;

 

/**

 * LogManager 类集中控制对日志读写的操作。

 * 全部为静态变量和静态方法,对外提供统一接口。分配对应日志类型的读写器,

 * 读取或写入符合条件的日志纪录。

 * @author     张三,李四,王五

* @see          LogIteraotor

 * @see         BasicLog

 * @since      CommonLog1.0

 */

publicclass LogManager

 

规则4       类属性(成员变量)、公有和保护方法注释:写在类属性、公有和保护方法上面,注释方式为“/**  */”.

示例:

/**

 * 注释内容

 */

privateString logType;

 

/**

 * 注释内容

 */

publicvoid write()

 

规则5       公有和保护方法注释内容:列出方法的一句话功能简述、功能详细描述、输入参数、输出参数、返回值、异常等。

格式:

 

/**

 * 〈一句话功能简述〉

 * 〈功能详细描述〉

 * @param [参数1]     [参数1说明]

 * @param [参数2]     [参数2说明]

 * @return  [返回类型说明]

 * @exception/throws [异常类型] [异常说明]

 * @see   [类、类#方法、类#成员]

* @since [起始版本]

 * @deprecated

 */

 

说明:@since 表示从那个版本开始就有这个方法,如果是最初版本就存在的方法无需说明;@exception或throws 列出可能仍出的异常;@deprecated 表示不建议使用该方法。

示例:

    /**

     * 根据日志类型和时间读取日志。

     * 分配对应日志类型的LogReader, 指定类型、查询时间段、条件和反复器缓冲数,

     * 读取日志记录。查询条件为null或0的表示没有限制,反复器缓冲数为0读不到日志。

     * 查询时间为左包含原则,即[startTime, endTime) 。

     * @param logTypeName  日志类型名(在配置文件中定义的)

     * @param startTime     查询日志的开始时间

     * @param endTime      查询日志的结束时间

     * @param logLevel      查询日志的级别

     *@param userName     查询该用户的日志

     * @param bufferNum    日志反复器缓冲记录数

     * @return 结果集,日志反复器

     * @since 1.2

     */

    public static LogIterator read(StringlogType, Date startTime,  Date endTime, intlogLevel, String userName, int bufferNum)

 

规则6       对于方法内部用throw语句抛出的异常,必须在方法的注释中标明,对于所调用的其他方法所抛出的异常,选择主要的在注释中说明。 对于非RuntimeException,即throws子句声明会抛出的异常,必须在方法的注释中标明。

说明:异常注释用@exception或@throws表示,在JavaDoc中两者等价,但推荐用@exception标注Runtime异常,@throws标注非Runtime异常。异常的注释必须说明该异常的含义及什么条件下抛出该异常。

 

规则7       注释应与其描述的代码相近,对代码的注释应放在其上方,并与其上面的代码用空行隔开,注释与所描述内容进行同样的缩排。

说明:可使程序排版整齐,并方便注释的阅读与理解。

示例:

/*

 * 注释

*/

publicvoid example2( )

{

    // 注释

    CodeBlock One

 

    // 注释

    CodeBlock Two

}

 

/*

 * 注释

*/

publicvoid example( )

{

    // 注释

    CodeBlock One

 

    // 注释

    CodeBlock Two

}

 

 

规则8       对于switch语句下的case语句,必须在每个case分支结束前加上break语句。

说明:break才能真正表示该switch执行结束,不然可能会进入该case以后的分支。至于语法上合法的场景“一个case后进入下一个case处理”,应该在编码设计上就避免。

 

规则9       修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。

 

规则10    注释的内容要清楚、明了,含义准确,防止注释二义性。

说明:错误的注释不但无益反而有害。

 

规则11    避免在注释中使用缩写,特别是不常用缩写。

说明:在使用缩写时或之前,应对缩写进行必要的说明。

 

规则12    对重载父类的方法必须进行@Override声明(5.0+)

说明:可清楚说明此方法是重载父类的方法,保证重载父类的方法时不会因为单词写错而造成错误(写错方法名或者参数个数,类型都会编译无法通过)

示例:

    @Override

    public voiddoRequest(SipServletRequest req) throws ServletException,

           IOException

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值