黑马程序员技术交流社区

标题: 关于if else语句 [打印本页]

作者: 万彪    时间: 2014-5-22 14:07
标题: 关于if else语句
我是刚刚开始自学一个星期的小白,今天没事,去找了下前辈们做的练习,苦思冥想了半个小时,搞出个看上去一点也不简练的代码,满以为应该没什么错误,但怎么运行的时候else的语句也跟着冒出来了,不是说,当以上都不成立的时候,才执行的语句吗,这是我运行的结果

  1. class  shijian
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.         getshijian(3600);

  6.         }

  7.         public static void getshijian(int num)
  8.         {        
  9.                 int miao;
  10.                 int fen;
  11.                 int shi;
  12.                 int tian;
  13.                 if (num<60 && num>=0)
  14.                 {
  15.                 System.out.println(num+"秒");
  16.                 }
  17.                 if (num<3600 && num>=60)
  18.                 {
  19.                         fen = num/60;
  20.                         miao = num%60;
  21.                 System.out.println(fen+"分钟"+miao+"秒");
  22.                 }
  23.                 if (num<86400 && num>=3600)
  24.                 {
  25.                         shi = num/3600;
  26.                         fen = num%3600/60;
  27.                         miao = num%3600%60;
  28.                         System.out.println(shi+"小时"+fen+"分钟"+miao+"秒");
  29.                 }
  30.                 if (num>86400)
  31.                 {
  32.                         tian = num/86400;
  33.                         shi = num%86400/3600;
  34.                         fen = num%86400%3600/60;
  35.                         miao = num%86400%3600%60;
  36.                         System.out.println(tian+"天"+shi+"小时"+fen+"分钟"+miao+"秒");

  37.                 }
  38.                 else
  39.                 {        
  40.                         System.out.println("没有负数表示的时间");
  41.                 }
  42.         }        
  43. }
复制代码

作者: 黑马-王宁    时间: 2014-5-22 14:26
  1. class shijian
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.         getshijian(-66);
  6.         }

  7.         public static void getshijian(int num)
  8.         {        
  9.                 int miao;
  10.                 int fen;
  11.                 int shi;
  12.                 int tian;
  13.                 if (num<60 && num>=0)
  14.                 {
  15.                 System.out.println(num+"秒");
  16.                 }
  17.                 else if (num<3600 && num>=60)
  18.                 {
  19.                         fen = num/60;
  20.                         miao = num%60;
  21.                 System.out.println(fen+"分钟"+miao+"秒");
  22.                 }
  23.                 else if (num<86400 && num>=3600)
  24.                 {
  25.                         shi = num/3600;
  26.                         fen = num%3600/60;
  27.                         miao = num%3600%60;
  28.                         System.out.println(shi+"小时"+fen+"分钟"+miao+"秒");
  29.                 }
  30.                 else if (num>86400)
  31.                 {
  32.                         tian = num/86400;
  33.                         shi = num%86400/3600;
  34.                         fen = num%86400%3600/60;
  35.                         miao = num%86400%3600%60;
  36.                         System.out.println(tian+"天"+shi+"小时"+fen+"分钟"+miao+"秒");

  37.                 }
  38.                 else
  39.                 {        
  40.                         System.out.println("没有负数表示的时间");
  41.                 }
  42.         }        
  43. }
复制代码


根据你写的稍作修改
作者: 木华    时间: 2014-5-22 14:34
我学过一段时间c语言,if else语句使用是有规则的,if和自己最近的else配对,所以最后一个else和最后一个if配对,你的程序执行时到最后一个if时就是不满足条件呀,所以else语句自然要执行了。可以在第一个if之前再加一个if语句,if(num>0)代码如下:class  shijian
{
        public static void main(String[] args)
        {
        getshijian(3600);

        }

        public static void getshijian(int num)
        {        
                int miao;
                int fen;
                int shi;
                int tian;
             if(num>0)  
        {  
           if (num<60 && num>=0)
                {
                System.out.println(num+"秒");
                }
                if (num<3600 && num>=60)
                {
                        fen = num/60;
                        miao = num%60;
                System.out.println(fen+"分钟"+miao+"秒");
                }
                if (num<86400 && num>=3600)
                {
                        shi = num/3600;
                        fen = num%3600/60;
                        miao = num%3600%60;
                        System.out.println(shi+"小时"+fen+"分钟"+miao+"秒");
                }
                if (num>86400)
                {
                        tian = num/86400;
                        shi = num%86400/3600;
                        fen = num%86400%3600/60;
                        miao = num%86400%3600%60;
                        System.out.println(tian+"天"+shi+"小时"+fen+"分钟"+miao+"秒");

                }}
                else
                {        
                        System.out.println("没有负数表示的时间");
                }
        }        
}

作者: 向前看向前走    时间: 2014-5-22 15:43
没有那么复杂,你没有返回语句,所以所以所有的if else 都执行,加上返回语句就可以,具体如下:
class  shijian
{
        public static void main(String[] args)
        {
        getshijian(3600);

        }

        public static void getshijian(int num)
        {        
                int miao;
                int fen;
                int shi;
                int tian;
                if (num<60 && num>=0)
                {
                System.out.println(num+"秒");
                }
                if (num<3600 && num>=60)
                {
                        fen = num/60;
                        miao = num%60;
                System.out.println(fen+"分钟"+miao+"秒");
                 return;
                }
                if (num<86400 && num>=3600)
                {
                        shi = num/3600;
                        fen = num%3600/60;
                        miao = num%3600%60;
                        System.out.println(shi+"小时"+fen+"分钟"+miao+"秒");
  return;

                }
                if (num>86400)
                {
                        tian = num/86400;
                        shi = num%86400/3600;
                        fen = num%86400%3600/60;
                        miao = num%86400%3600%60;
                        System.out.println(tian+"天"+shi+"小时"+fen+"分钟"+miao+"秒");
  return;

                }
                else
                {        
                        System.out.println("没有负数表示的时间");
                }
        }        
}
作者: 寻找人生目标    时间: 2014-5-22 15:50
  1. //你的代码改了下   注意看下注释  有些小问题
  2. //之前你穿的是3600  第一个if满足   而第二个if不满足  又正好 你说的else距离第二个if较近  所以else执行了  
  3. //希望能帮到你
  4. class  Times {   //这里类名每个单词的首字母应该大写  
  5.         public static void main(String[] args)  {
  6.         getTimes(3600);

  7.         }

  8.         public static void getTimes(int num) {      //这里方法名第二个单词首字母应该大写  
  9.                 int miao;
  10.                 int fen;
  11.                 int shi;
  12.                 int tian;
  13.                 if (num<60 && num>=0)  {
  14.                 System.out.println(num+"秒");
  15.                 }  else if   (num<3600 && num>=60)  {
  16.                         fen = num/60;
  17.                         miao = num%60;
  18.                 System.out.println(fen+"分钟"+miao+"秒");
  19.                 } else if  (num<86400 && num>=3600)  {

  20.                         shi = num/3600;
  21.                         fen = num%3600/60;
  22.                         miao = num%3600%60;
  23.                         System.out.println(shi+"小时"+fen+"分钟"+miao+"秒");

  24.                 } else if   (num>86400) {

  25.                         tian = num/86400;
  26.                         shi = num%86400/3600;
  27.                         fen = num%86400%3600/60;
  28.                         miao = num%86400%3600%60;
  29.                         System.out.println(tian+"天"+shi+"小时"+fen+"分钟"+miao+"秒");

  30.                 }else   {        
  31.                         System.out.println("没有负数表示的时间");
  32.                 }
  33.         }        
  34. }
复制代码

作者: 周俊波    时间: 2014-5-22 16:02
你都没用到else if  你要判断多次就要用这个 要不然if后面 继续if 接还是if 会继续从新判断,而不会算上你前一个if的判断结果了
作者: 万彪    时间: 2014-5-22 17:28
谢谢大家,感觉理解了
作者: code2014    时间: 2014-5-22 17:35
学习~~~~~   
作者: stream    时间: 2014-5-22 17:36
学习一下
作者: 13556793092    时间: 2014-5-22 17:45
你的else是针对的最后一个if语句的,就是当最后一个if条件不满足,才执行else语句,而你输入进来的是3600,
那你当然没满足最后一个条件啊,所以else就运行了。
作者: 飘渺≮★耘    时间: 2014-5-23 11:35
else配的是if(num>86400),你num不大于86400,所以就执行了,你要用else if(num>86400)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2