论坛首页 招聘求职论坛

今天去面试了一次。。悲剧了。。大家帮看看这题

浏览 25576 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (10)
作者 正文
   发表时间:2011-07-12  
zs396963330 写道
qwaz 写道
marcolee 写道
  public void swap(int a ,int b){
b = a + b;

a = b - a;
b = b - a;

System.out.println(" a = " + a );
System.out.println(" b = " + b );
}

小心阿,这样有可能会越界

怎么越界?

int值  你传递2个很大的参数试试 就知道了撒。不是数组越界  估计想表达的意思是 int不够。
0 请登录后投票
   发表时间:2011-07-12  
假设 a = INT.MAXVALUE
b = INT.MAXVALUE

a+b就悲剧了
0 请登录后投票
   发表时间:2011-07-12  
相加就有机会越界。
这多不考虑??
异或是正解。
0 请登录后投票
   发表时间:2011-07-12  
yizhilong28 写道
bloodstorm 写道

//交换a和b的值

public void swap(int a ,int b){
    int temp = a;
    a = b;
    b = temp;
}


要求:修改此方法,不能定义temp中间变量,实现值得交换

...没想到怎么搞。。。

这样的公司不去也罢,牺牲可读性的代码维护起来,你懂的


+1
0 请登录后投票
   发表时间:2011-07-12  
这个题本身就有问题,原来那种方式真的能交换a和b???
只要用的还是java语言,不管你方法体里怎么实现,也不可能写得出一个可以工作的swap(int a, int b)的
0 请登录后投票
   发表时间:2011-07-12  
lyw985 写道
jancy 写道
zhangyang6380006 写道
我记得我上次面试也问了这个,我当时顿住了,10钞后想出来了,没有第三变量,必然是两个变量相加和相减操作,a=a+b;b=a-b;a=a-b;

如果2个变量都是数字,这样可以
字符串的话,就不行了。
这样比较通用:
b ^= a ^= b ^= a;


写这么复杂。。。。。

实际上就是异或操作

a=a^b;
b=b^a;
a=b^a;

+1 上学时老师就教过这个
0 请登录后投票
   发表时间:2011-07-12  
垃圾题目,这个方法没办法实现交互。。java无解
0 请登录后投票
   发表时间:2011-07-12  
lyw985 写道
jancy 写道
zhangyang6380006 写道
我记得我上次面试也问了这个,我当时顿住了,10钞后想出来了,没有第三变量,必然是两个变量相加和相减操作,a=a+b;b=a-b;a=a-b;

如果2个变量都是数字,这样可以
字符串的话,就不行了。
这样比较通用:
b ^= a ^= b ^= a;


写这么复杂。。。。。

实际上就是异或操作

a=a^b;
b=b^a;
a=b^a;


b ^= a ^= b ^= a;写法错误,为什么写上去之前不验证一下呢?
swap(5,3)输出:
a = 3
b = 0
lyw985的写法正确。

0 请登录后投票
   发表时间:2011-07-12  
haohouhou 写道
b = a + 0*(a = b)

0 请登录后投票
   发表时间:2011-07-12  
workingbird 写道
lyw985 写道
jancy 写道
zhangyang6380006 写道
我记得我上次面试也问了这个,我当时顿住了,10钞后想出来了,没有第三变量,必然是两个变量相加和相减操作,a=a+b;b=a-b;a=a-b;

如果2个变量都是数字,这样可以
字符串的话,就不行了。
这样比较通用:
b ^= a ^= b ^= a;


写这么复杂。。。。。

实际上就是异或操作

a=a^b;
b=b^a;
a=b^a;

这个是正解。

很疑问,这道题究竟是考的啥能力?考察程序员是否变态?


应该是考思维能力
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics