Java谜题--1

java谜题--1

 

 

解惑1:



大佬你可能会觉得输出为:number:101

But not

执行结果如下:


启示:

不要在常量与变量中出现易混淆的字母,常量全部大写并用下滑线分割,变量采用小驼峰命名法命名。

 


 

解惑2



大佬你可能会觉得输出为:true,因为 都是90,所以相等。

But not

执行结果如下:

 

启示:

对于三元运算符有以下特性:

 

当你使用三元运算符,两边的操作数的类型不一致的时候,这就涉及到三元操作符的转换规则:?

1.若果两个操作数不可转换,则不做转换,返回值为Object类型。?

2.若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换。int类型转换为long类型,long类型转换成float类型。?

3.若两个操作数中有一个是数字S,另外一个是表达式,且其类型为T,那么,若数字S在T的范围内,则转换为T类型;若S超过了T的范围,则T转换为S类型。?

4.若两个操作数字都是直接数字。则返回值类型为范围较大者。?

 

保证三元操作符中的两个操作类型一致,即可减少错误的发生。

 

 

 

解惑3:

 

大佬可能觉得会出:10

But no

执行结果如下:


 

启示:

警惕自增的陷阱;

 

 

 

解惑4:

 

大佬你觉得为什么 b4 那句会出现错误!!!

正确答案:


因为’A’ 不属于对象。而instanceof 只能用于对象的判断,不能用于基本类型的判断。

 

大佬你觉得b1,b2,b3,b5,b6是true还是false;

正确答案:

True,true,false,false,false;

启示:

A: ‘A’ instanceof Character instanceof 只能用于对象的判断,不能用于基本类型的判断。

B: null instanceof String 语言特性,左边是null 结果直接为false;

C: null instanceof String instanceof 的左右操作数必须具有实现或继承关系,否则编译失败

 

 

 

解惑5;



大佬你觉得这个判断奇偶数的方法是否存在问题?

请看如下情况:


显然对于负数奇数是无效的,

那如何改进

我的方法如下(用偶判断,不用奇判断):

 

 



解惑6



大佬你觉得结果是: 0.40 吗?

But not

执行结果如下:


启示:

 

计算中浮点数有可能是不精确的,它只能无限接近准确值,而不能完全准确。

对于精确的值,最好用int ,long的整形变量。

 

 

 

 

解惑7:


大佬可能认为结果为:10.5的近似值为11,-10.5的近似值为-11;

But not

执行结果如下:

 





解惑8:



大佬你可能会觉的输出结果为 true,false,false

But no

执行结果如下:




启示:

对于基本类型的封装类,equal()是比较内容是否相同,

compareTo()比较的是对象的大小。基本类型的对象不存在==,>=,<=的比较,

提示,对于String类的对象,equal()是比较内容是否相同,==是比较对象是否相同。

对于其他类的对象而言,equal()是比较对象是否相同。

 

 

 

解惑9:



这个正确,没问题。

对于下面这道题。


是不能编译吗?

But not

执行结果如下:


启示:

静态变量是类加载时就已经分配到数据区,它在内存中只是一个拷贝,不会被分配多次,其后所有赋值操作都是值的改变,地址则保持不变,我们知道jvm初始化变量是先声明空间,然后在赋值的,如果多个静态快对静态快继续赋值, I 当然还是等于1了,谁的位置靠后,谁就有追中的解释权。

 

 

 

解惑10:

父类:


子类:


测试类:


大佬你可能会觉得当然是全部输出子类方法里的语句啦。

But not

执行结果如下:

 

启示:

静态方法不能被重写,但能够被隐藏。

静态方法的特殊性,静态方法不依赖与任何一个其实例对象,它是通过类名访问的,其次,可以通过对象实例访问静态方法,jvm会通过对象的表面类型查找静态方法的入口,继而执行(表面类型是声明类型,实际类型是对象产生时的类型)

 

 

疑点问答:

A:

大佬问:为啥println方法打印一个对象会调用toString方法呢,那是源于pringtln的实现机制,如果是一个原始类型就直接打印,如果是对象类型,就打印toString()方法的返回值。

 

B:

大佬问:为啥在项目中总会出现package-info的类

Package-info是不能声明此类的,它是描述和记录本包信息的,提供包的整体注释说明。

 

 

 


 分享(share )是快乐的,也是见证个人的成长历程,文章主要为平时学习积累,基于自身认知不足之处在所难免,也恳请大家指正共同进步

 

 


 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是使用 Java 编写的狼羊菜过河问题的回溯法解决方案: ```java public class Main { public static void main(String[] args) { int[] state = {0, 0, 0, 0}; // 初始状态,0表示这个人和狼、羊、菜都在左岸 boolean success = backtrack(state, 0); // 调用回溯函数 if (success) { System.out.println("找到了符合条件的解!"); for (int i = 0; i < 4; i++) { System.out.println("位置 " + i + " 的状态是:" + state[i]); } } else { System.out.println("无法找到符合条件的解!"); } } public static boolean backtrack(int[] state, int pos) { // 判断当前状态是否符合条件 if (pos == 4 && state[0] == 0 && state[1] == 0 && state[2] == 0 && state[3] == 0) { return true; // 找到了符合条件的解 } // 尝试所有可能的状态 for (int i = 0; i < 5; i++) { if (is_valid(state, pos, i)) { // 判断当前状态是否合法 state[pos] = i; // 更新状态 if (backtrack(state, pos + 1)) { return true; // 找到了符合条件的解 } state[pos] = -1; // 回溯到上一个状态 } } return false; // 没有找到符合条件的解 } public static boolean is_valid(int[] state, int pos, int val) { if (pos == 0) { // 起点状态,不需要判断 return true; } if (val == state[pos - 1]) { // 不能带上上一次带过来的动物或菜 return false; } if (state[0] != state[1]) { // 人必须在带走动物或菜的岸边 return false; } if (state[1] == 0 && (state[2] == 1 && state[3] == 1)) { // 狼吃羊的情况 return false; } if (state[1] == 0 && (state[1] == 2 && state[3] == 4)) { // 羊吃菜的情况 return false; } if (state[1] == 1 && (state[2] == 0 && state[3] == 0)) { // 狼羊都在右岸而人在左岸的情况 return false; } if (state[1] == 1 && (state[1] == 2 && state[3] == 4)) { // 羊菜都在右岸而人在左岸的情况 return false; } return true; } } ``` 在这个代码中,`state`数组表示当前的状态,`pos`表示当前搜索到的位置,`is_valid`函数用来判断当前状态是否合法,如果当前状态合法,就更新状态数组并继续往下搜索,否则就回溯到上一个状态重新尝试其他可能的状态。 注意,在判断状态是否合法时,我们需要根据题目要求对每种情况进行判断,例如,不能带上上一次带过来的动物或菜,人必须在带走动物或菜的岸边,狼不能和羊在同一岸边等等。 最后,我们可以调用`backtrack`函数来解决狼羊菜过河问题,例如: ``` int[] state = {0, 0, 0, 0}; // 初始状态,0表示这个人和狼、羊、菜都在左岸 boolean success = backtrack(state, 0); // 调用回溯函数 if (success) { System.out.println("找到了符合条件的解!"); } else { System.out.println("无法找到符合条件的解!"); } ``` 这样就可以找到符合条件的解,或者确定无解了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值