我的代码有什么问题

我的代码有什么问题

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>闰年</title>

</head>

<body>

<script type="text/javascript">

var x=prompt("请输入您的出生年份"),

    y=prompt("请输入您的出生月份"),

    z=prompt("请输入您的出生日期");

function inner(x,y,z){

    var i=1,

    m=2,

    num1=0,

    num2=0,

    num3=0;

               for(i<y & !i%2==0;i+=2){

                  num1+=31; 

               }

               for(m<y & m%2=0;m+=2){

                  num2+=30;

              }

if(x%4==0){

              num3=num2+num1+z-1;

               }else if(!x%4==0){

                num3=num2+num1+z-2;

}

    document.write("您的生日是"+x+"年"+"的第"+num3+"天");

}

</script>

</body>

</html>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
提问者 慕后端9201690 2019-05-07 13:06:26

关于闰年的判断我的理解是:400可以分解成4和100,那也就是说如果是闰年就必须要可以被4整除,而被100整除只是区分这个闰年是普通闰年还是世纪闰年
综上所述:判断是不是闰年只需要判断是否可以被4整除这一个条件就可以了。

  • 同学你好, 这里不可以写成一个条件哦~。 因为普通年能被4整除且不能被100整除的为闰年。否则为平年。(如2004年就是闰年,1900年不是闰年) 世纪年能被400整除的是闰年。否则为平年。(如2000年是闰年,1900年不是闰年)
    2019-05-07 13:39:46
  • 提问者 慕后端9201690 回复 好帮手慕慕子 #2
    我知道了,能被4和100整除并不能证明能被400整除,是我理解错了,谢谢老师。
    2019-05-08 14:21:10
好帮手慕慕子 2019-05-07 11:06:58

同学你好, 代码这个的问题如下

  1. for循环中必须使用两个封号分隔变量, 条件和执行语句, 示例: for(语句1; 语句2 ; 语句3 ){}

  2. 第二个for循环中 判断m%2需要写等于号(==), 你这里写成了赋值号(=)

  3. 大月(31)和小月(30)判断不对, 1,3,5,7,8,10,12这几个月份为31天,所以使用与2取余操作是不可以的

  4. 闰年判断条件不对。能被4整除而不能被100整除或者被400整除的年份为闰年

  5. prompt()获取的内容是字符串,后面计算天数时,字符串与其他内容相加会默认进行字符串拼接,所以为了避免这个问题,可以弹窗上面使用parseInt()把字符串转换为数值。

  6. 声明的函数inner, 没有调用

老师这里提供一个示例代码。 可以参考下图代码中注释理解

function inner() {
    // 获取用户输入的年月日
    var year = prompt("请输入您出生的年份"),
        month = prompt("请输入您出生的月份"),
        // 对输入的天数进行数值转换操作
        day = parseInt(prompt("请输入您出生的日期")),
        sum = 0;
    // 判断闰年,是闰年的话将二月份的天数加一
    if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
        arguments[1] = 29;
    }
    // 循环月份,将以前的月份天数先累加起来
    for (var i = 0; i < month - 1; a++) {
        sum += arguments[i];
    }
    // 加上当前月份中的天数
    var result = sum + day;
    document.write("您的生日在" + year + "年的第" + result+ "天")
}
// 调用函数, 传入对应的月份,在函数中使用arguments获取参数
inner(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

老师这里也只是提供一个参考,问答区域经常会有一些同学分享自己的代码。 甚至有一些同学思路比老师提供的示例代码要好。 同学也可以去问答区学习一下 . 同时别人出现的问题 ,踩过的坑 , 也是可以吸取一下经验 ,这样自己能够避免自己出现类似问题 . 对自己也是有很多帮助的哦

如果帮助到了你, 欢迎采纳!

祝学习愉快~~·


  • 提问者 慕后端9201690 #1
    关于闰年的判断我的理解是:400可以分解成4和100,那也就是说如果是闰年就必须要可以被4整除,而被100整除只是区分这个闰年是普通闰年还是世纪闰年 综上所述:判断是不是闰年只需要判断是否可以被4整除这一个条件就可以了。
    2019-05-07 13:07:40
  • 提问者 慕后端9201690 #2
    for循环的语句,我记得老师说过那个变量的声明是可以在括号外进行的,这样的话就不用拿到括号里面去,这样理解错了嘛?
    2019-05-07 13:09:47
  • 好帮手慕慕子 回复 提问者 慕后端9201690 #3
    同学的理解没有错。 可以在括号外声明, 但是for循环的括号里面规定必须使用两个封号, 不然会报错,同学这里可以像这样写for ( ; i < y & !i % 2 == 0; i += 2){}
    2019-05-07 13:35:30
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
前端小白入门系列课程
  • 参与学习           人
  • 提交作业       11218    份
  • 解答问题       36713    个

从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师