while循环里的一些小陷阱!!

(一)

       //设有程序段
		boolean k = false;
		while( k = false);
		System.out.println("快乐风男");
		
		//则下面描述中正确的是()
		
		//A、语法错误
		//B、无限循环
		//C、快乐风男语句一次也不执行
		//D、快乐风男语句执行一次

此处值得注意的是while循环里是赋值符号 = 而不是等于符号 ==,相当于先把false赋值给k,再进行k!= false这样一个判断,第二个需要注意的是while()后面跟着的是一个分号;所以循环体是一个空语句,由于k == false --> false != false是不成立的,所以会直接跳出循环执行语句System.out.println(“快乐风男”);一次后程序就结束,所以答案选D。

(二)

       //下面的程序段的运行结果是()
		int n = 0;
        while(n++ <= 2);
        System.out.println(n);
        
        //A、1 2 3
        //B、3
        //C、4
        //D、语法错误

首先呢A答案是肯定不对的,因为println是打印并换行,那里显然没有换行,这里和上面一题一样while后面跟着的是分号;所以循环体为空语句,因此 System.out.println(n);只会执行一次,最终输出的结果只会有一个数。
再来看while(n++ <= 2)等同于 while(n <= 2) n++;即先用来判断 ,在自增1。
whlie(0++< = 2)
whlie(1++< = 2)
whlie(2++< = 2)
whlie(3++< = 2) 即到3的时候,不满足跳出循环,然后在执行一次n++,n的值就来到4,所以选C

(三)

//下面程序段的运行结果是()
		double num = 1;
		double sum = 0;
		while(num != 0){
			sum += num;
			num -=0.1;
		}
		System.out.println(sum);

首先这是死循环,大家可以自行运行试试.
下面改改程序 ,加一个i来控制字数观察num的变化


		//下面程序段的运行结果是()
		double num = 1;
		double sum = 0;
		int i = 0;
		while(num != 0 && i < 10){
			sum += num;
			num -=0.1;
			System.out.println(num);
			i++;
		}
		System.out.println(sum);

在这里插入图片描述
从结果可以发现num到0.7就出现问题了,这应该是一个bug,这里提醒我们在循环控制中,最好不要使用浮点型来比较值是否相等!!!

猜你喜欢

转载自blog.csdn.net/w15977858408/article/details/88990124