学习java第二天,经典题交流分享
请说出下面的运算结果及解释为什么
1、System.out.println(1+1+“1”);//?
此代码输入的结果为:21,代码中的1+1是对两个整数1进行了相加,之后的+”1”,会被程序认为是一个字符串与前面两个整数相加的结果相连接,所以结果为21
2、System.out.println(“1”+1+1);//?
此代码输入的结果为:111,代码中前面的”1”+会被程序认为是一个字符串,这里需要注意,如果””+是放在执行程序的前面,那么整段程序都将为看成是字符串的连接,所以结果为111
结果验证:
验证:System.out.println(1+1+“1”);和 System.out.println(“1”+1+1); 代码如下: /** *作用:验证System.out.println(1+1+“1”);//?和System.out.println(“1”+1+1);//? *作者:李林雄 */ public class Test2{ public static void main(String[] args){ //输出代码的结果,进行验证 System.out.println(1+1+"1"); System.out.println("1"+1+1); } } 代码结果: 21 111
|
实现两个整数变量的交换
代码如下: /** *作用:两个整数变量的交换 *作者:李林雄 */ public class Test3{ public static void main(String[] args){ //定义三个变量,并赋值给其中两个变量 int a=9,b=10,c; //将变量a先赋值给变量c; c = a; //将变量b赋值给变量a; a = b; //将以前已经得到a的值的变量c在赋值给变量b b = c; //打印两个变量,验证查看值是否发生变换 System.out.println("a = "+a); System.out.println("b = "+b); } } 执行结果如下: a = 9 b = 10 |
求三个整数中的最大数
代码如下: /** *作用:求三个数中的最大数 *作者:李林雄 */ public class Test4{ public static void main(String[] args){ //定义四个变量,其中不给max赋值,max用于来接收三个数中的最大值 int a = 10,b = 20,c = 30,max; //使用三目运算符判断a和b中的最大值,并将最大值赋给变量max max = (a>b)?a:b; //在使用a和b中的最大值max与b比较大小,在将最大值赋给max max = (max>c)?max:c; //打印三个数中的最大值 System.out.println("三个数中的最大值为:"+max); } } 运行结果如下: 三个数中的最大值为:30 |
某查询结果的记录数为66条,每页显示10条,请计算总页数有几页?
代码如下: /** *作用:某查询结果的记录数为66条,每页显示10条,请计算总页数有几页? *作者:李林雄 */ public class Test5{ public static void main(String[] args){ //定义两个浮点型变量a,b int a = 66,b=10; //用计算总记录除以每页数显示的记录条数,得到总页数 int c = (int)(a/b+1/3.0*3); //输出页数的数量 System.out.print("显示的总页数为:"+c); } } 输出结果如下: 显示的总页数为:7 注意:由于页数不能为小数,只能为一整页,所以页数应该为7 |
设计一个实验证明&和&&的区别
代码如下: /** *作用:设计一个实验证明&和&&的区别 *作者:李林雄 */ public class Test6{ public static void main(String[] args){ //定义两个boolean类型的变量 boolean b,c; c = false&&b; System.out.println(c); } } 以上代码输出的结果为: false
这里我们并有给变量b赋予boolean值,使用&&能正常将结果执行出来,同样的我们将&&(短路或)改成&(逻辑或) 代码如下: /** *作用:设计一个实验证明&和&&的区别 *作者:李林雄 */ public class Test6{ public static void main(String[] args){ //定义两个boolean类型的变量 boolean b,c; c = false&b; System.out.println(c); } } 代码执行结果如下: 报错 我们在使用javac对代码进行编译就已经发生报错,这里是因为在代码“c = false&b;”使用的是&(逻辑或)即使在第一个参数“false”已经可以判断代码执行的结果,但是它还是要往后面执行,由于b并没有初始化,所以发生已上错误,而如果使用的&&(短路或)在执行代码“c = false&b;”的时候从第一个参数就已经可以判断代码的执行结果了,所以就不在往后执行,即使b变量没有初始化,但是代码没有执行,于是就没有发生错误。
第二种验证方法: /** *作用:短路与逻辑与的验证 *作者:李林雄 */ public class Test7{ public static void main(String[] args){ int n=10; boolean b = false&(n=1)>1; System.out.println(n); } } 输出结果: 0
讲以上代码改为:
/** *作用:短路与逻辑与的验证 *作者:李林雄 */ public class Test7{ public static void main(String[] args){ int n=10; boolean b = false&&(n=1)>1; System.out.println(n); } } 输出结果为: 10 同理,&&得出结果为false之后不再运算后面的算法,而&还要运算,导致n的值不一致 |