2 faradayzhangchina FaradayZhangChina 于 2016.09.08 10:33 提问

if的条件设置可以有2个括号吗?

最近,我看到网络上有一道题是《Java2新观念读本》里的一道题。题目如下:
编译并执行下列的代码,会出现什么结果:

 class Test{
        public static void main(String [] args){
            int i=6;
            float f=6.0000000000009F;
            double d=6.0000000000009;
            if(f==i)
            if(f==d)
            System.out.println("a");
            else
            System.out.println("b");
            else
            System.out.println("c");
        }
    }

A. 程式編譯時發生錯誤
B. 輸出 a
C. 輸出 b
D. 輸出 c

答案是C
首先,我想请教大神:6.0和float f以及double d到底是不是相等的?如果是,为何会执行第二个else的输出结果?
2个括号的条件,是必须同时符合2个条件才执行下面的语句吗?能把这个if...else的条件从句用流程图表示清楚吗?谢谢

6个回答

newVenues
newVenues   2016.09.08 10:49

先回答第一个问题。6和float和double类型,数值是相等的,但是类型不同。所以用==比较,是不等的。

qq_28140917
qq_28140917 ==比较的是数值,数值比较是不会比较什么类型,没看到他们是小写?
接近 2 年之前 回复
Veggiel
Veggiel   2016.09.08 10:41
 int i=6;
      float f=6.0000000000009F;
      double d=6.0000000000009;
      if(f==i)//f是不等于i的执行下一句
      if(f==d)//f是不等于d的所以执行他的else语句输出b
      System.out.println("a");
      else
      System.out.println("b");
      else
      System.out.println("c");

if语句它只能控制在它下面那一行的代码以分号结尾

Veggiel
Veggiel 说的不对:
接近 2 年之前 回复
en_reading
en_reading   2016.09.08 11:23

我放在Eclipse中执行,输出的是b。我在debug模式里看了各个的值,f=6.0,而d就等于被赋值的值。
图片说明

en_reading
en_reading   2016.09.08 11:25

float精度最多是8位,但double可以是15位。

Veggiel
Veggiel   2016.09.08 10:52

补充一下:if语句当它没有{}并且它有else语句时它只能控制if下面一行以分号结尾的代码或者是一个代码块,

  if(f==d)//f是不等于d的所以执行他的else语句输出b
      System.out.println("a");
      else
      System.out.println("b");

这段代码就相当于一个代码块
完整的语句时这样的:

 int i = 6;
        float f = 6.0000000000009F;
        double d = 6.0000000000009;
        if (f == i) {// f是不等于i的执行下一句
            if (f == d)// f是不等于d的所以执行他的else语句输出b
                System.out.println("a");
            else
                System.out.println("b");

        } else {
            System.out.println("c");
        }
FaradayZhangChina
FaradayZhangChina Veggie, 谢谢你的及时回复,我基本弄明白了,但是,if(f==i)不成立时,为何不是执行System.out.println("c"); 却执行了if(f==d)?
接近 2 年之前 回复
kanonlemon
kanonlemon   2016.09.08 11:13

这个加上缩进就清晰明了了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
for(条件1;条件2;条件3)
for(条件1;条件2;条件3) { //语句 } 执行顺序是条件1->条件2->语句->条件3->条件2->语句->条件3->条件2…….. 如果条件2为true,则一直执行。如果条件2位false,则for循环结束
sql语句中or条件有无括号举例!!
select * from school where class=1 and (sex like 男 or birthday like 1);                       or在括号里面,结果集是班级1后再加过滤条件是男生或生日在1月份得到的; select * from school where class=1 and sex like 男 or birthday like
if条件语句 加括号与不加 括号 的区别
加 大括号是表示 满足 小括号中条件时执行的。  而不加 大括号,则表示默认的满足条件时,执行后面的第一句话。以分号结束。 if(   ){     表达式1;   表达式2;   表达式3;   表达式4; } 表达式1,2,3,4 都会执行的。 而不加 if()   表达式1;表达式2; 表达式3; 表达式 2,3  都不会执行的。因为不是后面第一句。
javascript for循环条件 2个条件和 3个条件的区别
Document         var c = 1000;   for (i = 0; c > i;)    h = i * 8,i++ ;   document.write(h);     ============ 结果 7992 =====================               Document
if(!a) 括号里面的条件 !表示的是什么意思
在if(表达式){语句} 条件语句里,如果表达式值为真的话,刚执行花括号里的语句;若表达式为假,刚不执行 对于if(!a)来说,要看你给a的初值是什么,如果是一个非零值的话,那么!a就是假,不执行语句; 如果a的初值为零,那么!a就是真,执行语句(另外,C++中把非零的数看作是真,零为假)   即只要括号里的表达式值为真则 执行否则不执行或执行else里的语句。!a可为真也可以为假
sql where条件语句中同时包含and,or注意加括号
在测试程序的时候发现sql查询语句超过范围检查sql语句发现原语句:select xx from xx where a=b and c=d or e=f;预期的结果是满足a=b的同时c=d或者e=f,忘记加括号导致范围超限加括号后select xx from xx where a=b and (c=d or e=f);问题随小,还是值得注意...
算法习题46:四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(())
来自:http://bbs.csdn.net/topics/350118968 搜狐: 四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(()) --------------------------------------------- 这题直接用栈的思想就可以了,刚开始我还想直接用全排列的方法来解决,发现问题变得更加复杂了,因为重复问题不好解决,所以这里还是利用递
mysql join的on条件内 可以带and建立多条件join
mysql join on 可以带and,例如: select * from (select id,realname from `user` where id=157) a left join `crm_customer2user` cu on a.id=cu.userId a
一行数学公式,在这个公式里有N个括号,其中各括号可以互相嵌套,请你写一个函数找出指定的第N个括号中的全部内容。
题目如下:第一种方法: class Program { static void Main(string[] args) { //一行数学公式,在这个公式里有N个括号, //其中各括号可以互相嵌套,请你写一个函 //数找出指定的第N个括号中的全部内容。 string...
Hibernate HQL 括号问题
今天碰到个自我感觉奇怪的问题,在编写where条件时添加了or,然后用括号把or后面的内容给括起来了,但是hql解析后生成的sql发现没有括号了,开始的时候坚定的认为生成的sql不对,各种尝试,甚至都怀疑Hibernate出现Bug了,后来怀疑or是不是用的不对,不能这么干,后来又怀疑is not null 等等一切,最后同事从网上查到发现,and的优先级要高于or,之后就没有之后了