`
wujiazhao88
  • 浏览: 11408 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

不用判断语句求俩数中的大(或者小)数

阅读更多

前段日子找工作期间,经常上网找面试题目做做。

忘了是哪家公司的题目,其中有这么一道题

说,不能使用boolean,if else等判断语句,要求求出两个数中的大数,

【add at 2009-12-10 15:33:52】另,不能用Math类

 

一开始想来想去没有思路,后来想想,程序中需要判断的不就是if-else等逻辑判断以及异常嘛。。。

既然不能用判断,那就只能用异常了。

所以思路是,构造一段代码,让他遇到两个数时,可以构造出异常。什么代码可以这么神奇呢?

呵呵,很简单,用数组的越界可以解决问题!

 

public static int getMaxValueWidthoutBoolean(int a,int b){
 int[] array=new int[a];
try{
//只要b比a大,数组越界,肯定会导致异常,否则b比a小
//所以在catch模块中返回b,非异常返回a即可
array[b]=0;
}catch(Exception ex){
return b;
}
return a;
}

 呵呵,没去查过别人的解法是咋样的,我觉得应该还有其他更好的解法,各位想一想,知道的告知在下,谢谢了!

分享到:
评论
123 楼 wujiazhao88 2013-04-19  
chiyx 写道
chiyx 写道
maxValue = (math.abs(value1 - value2) + (value1 + value2)) / 2


没看清不能用math。。 汗

弱爆
122 楼 chiyx 2012-07-08  
chiyx 写道
maxValue = (math.abs(value1 - value2) + (value1 + value2)) / 2


没看清不能用math。。 汗
121 楼 chiyx 2012-07-08  
maxValue = (math.abs(value1 - value2) + (value1 + value2)) / 2
120 楼 Ashfrog 2010-09-03  
呵呵,这个有点意思···
楼主的办法不错···
119 楼 njbble 2010-08-24  
public int max(int a , int b)
	{
		Set<Integer> set = new TreeSet<Integer>();
		set.add(a);
		set.add(b);
		return (Integer)set.toArray()[0];
	}

如果觉得Integer不够大,或者比较非整数,可以换成Double。。。
118 楼 wujiazhao88 2010-08-24  
额,各位同学,咱不挖坟了哈..用移位才是正解,异常其实用的也是if-else
117 楼 sam_chi 2010-08-24  
哈哈,用异常,亏你想的出来~~
116 楼 KimShen 2010-08-23  
这个..能用包装类么?
long i = -1111111111111113L;
long j = -1111111111111112L;
System.out.println(Long.signum(i-j));
115 楼 lewisw 2010-08-23  
return a > b ? a : b;

兄弟啊能确定这个也不能用吗?
114 楼 jbon 2010-08-22  
<div class="quote_title">wujiazhao88 写道</div>
<div class="quote_div">
<p>前段日子找工作期间,经常上网找面试题目做做。</p>
<p>忘了是哪家公司的题目,其中有这么一道题</p>
<p>说,不能使用boolean,if else等判断语句,要求求出两个数中的大数,</p>
<p>【add at 2009-12-10 15:33:52】另,不能用Math类</p>
<p> </p>
<p>一开始想来想去没有思路,后来想想,程序中需要判断的不就是if-else等逻辑判断以及异常嘛。。。</p>
<p>既然不能用判断,那就只能用异常了。</p>
<p>所以思路是,构造一段代码,让他遇到两个数时,可以构造出异常。什么代码可以这么神奇呢?</p>
<p>呵呵,很简单,用数组的越界可以解决问题!</p>
<p> </p>
<pre name="code" class="java">public static int getMaxValueWidthoutBoolean(int a,int b){
int[] array=new int[a];
try{
//只要b比a大,数组越界,肯定会导致异常,否则b比a小
//所以在catch模块中返回b,非异常返回a即可
array[b]=0;
}catch(Exception ex){
return b;
}
return a;
}</pre>
<p> 呵呵,没去查过别人的解法是咋样的,我觉得应该还有其他更好的解法,各位想一想,知道的告知在下,谢谢了!</p>
</div>
<p>各位,好像没说是整数,如果有小数呢?</p>
113 楼 aaron198 2010-08-22  
呵呵见识了
112 楼 zhuyan_zy 2010-08-21  
抛出异常的爱 写道
跳大神也是一种艺术:
public class MaxMin {
	static int max = 0 ;
	public static void main(String[] args) throws InterruptedException {
		MaxMin m = new MaxMin();
		int a = m.max(9, 10);
		System.out.println("最大:"+a);
		
	}
	public int max(int a , int b ) throws InterruptedException{
		new MyThread(a,this).start();
		new MyThread(b,this).start();
		Thread.sleep((a+b));	
		return this.max;
	}
}

class MyThread extends Thread{
	public int f = 0;
	public MaxMin max ;
	MyThread(int f , MaxMin max){
		this.f=f;
		this.max = max;
	}
	public void run() {
		try {sleep(f);} catch (Exception e) {}
		max.max = f;
	}
}

呵呵,a和b的值都很大的时候,等到算出来岂不天荒地老了,还有,a,b中有存在负数的情况呢?
111 楼 usiboy 2010-07-19  
cuishen 写道
severusz 写道
superxielei 写道
int getMaxNum(int a,int b){
  double x = (double)a;
  double y = (double)b;
  return (int)(x/2+y/2+Math.abs(x/2-y/2));
}


双手赞成,想当年老师也是这么讲的!

不能用Math类,看来好多童鞋没有看清题目,就在做了啊!

我把楼上的改成这样了
public static int getMaxNum(int a, int b) {
		double x = (double) a;
		double y = (double) b;
		double temp = x / 2 - y / 2;
		return (int) (x / 2 + y / 2 + ((temp <= 0.0D) ? 0.0D - temp : temp));
	}
110 楼 cuishen 2010-07-19  
severusz 写道
superxielei 写道
int getMaxNum(int a,int b){
  double x = (double)a;
  double y = (double)b;
  return (int)(x/2+y/2+Math.abs(x/2-y/2));
}


双手赞成,想当年老师也是这么讲的!

不能用Math类,看来好多童鞋没有看清题目,就在做了啊!
109 楼 cuishen 2010-07-19  
Jack-chen 写道
http://liaofan2009.iteye.com/blog/552593

(a+b+Math.abs(a-b))/2

不能用Math类
108 楼 cuishen 2010-07-19  
superxielei 写道
int getMaxNum(int a,int b){
  double x = (double)a;
  double y = (double)b;
  return (int)(x/2+y/2+Math.abs(x/2-y/2));
}

不能用Math类
107 楼 alexshander 2010-07-18  
用位运算吧
public int getMax(int a,int b){
  int[] num={a,b};
  return int[(a-b)>>>31];
}
106 楼 andyjojo 2010-07-18  
return (int)( a*( (0L+b-a)>>>63 ) + b*( (0L+a-b)>>>63 ) )
105 楼 wangxiucai02 2010-07-16  
试试用hashset保存这两个数
Set set=new HashSet();
        set.add(5);
        set.add(9);
大的数在hashset中的前面
104 楼 shbgreenery 2010-07-16  
<div class="quote_title">wujiazhao88 写道</div>
<div class="quote_div">
<p>前段日子找工作期间,经常上网找面试题目做做。</p>
<p>忘了是哪家公司的题目,其中有这么一道题</p>
<p>说,不能使用boolean,if else等判断语句,要求求出两个数中的大数,</p>
<p>【add at 2009-12-10 15:33:52】另,不能用Math类</p>
<p> </p>
<p>一开始想来想去没有思路,后来想想,程序中需要判断的不就是if-else等逻辑判断以及异常嘛。。。</p>
<p>既然不能用判断,那就只能用异常了。</p>
<p>所以思路是,构造一段代码,让他遇到两个数时,可以构造出异常。什么代码可以这么神奇呢?</p>
<p>呵呵,很简单,用数组的越界可以解决问题!</p>
<p> </p>
<pre name="code" class="java">public static int getMaxValueWidthoutBoolean(int a,int b){
int[] array=new int[a];
try{
//只要b比a大,数组越界,肯定会导致异常,否则b比a小
//所以在catch模块中返回b,非异常返回a即可
array[b]=0;
}catch(Exception ex){
return b;
}
return a;
}</pre>
<p> 呵呵,没去查过别人的解法是咋样的,我觉得应该还有其他更好的解法,各位想一想,知道的告知在下,谢谢了!</p>
</div>
<p>适合负数吗?</p>

相关推荐

    例4.2,例4.2输入俩个实数按由小到大的顺序输出这俩个数,matlab源码.zip

    本示例“例4.2,例4.2输入俩个实数按由小到大的顺序输出这俩个数,matlab源码”旨在教授如何在MATLAB中接收用户输入的两个实数,并按照从小到大的顺序进行输出。以下是关于这个主题的详细解释: 首先,MATLAB中的`...

    java 导入及判断的Excel 使用方法

    本文将深入探讨Java中导入和判断Excel的使用方法,结合实例分析,帮助你全面理解这一技术。 首先,Java与Excel的交互通常依赖于第三方库,如Apache POI或JExcelAPI。Apache POI是目前最常用的一个,它提供了丰富的...

    c代码-如果一个数大于60输出及格,否则输出不及格。

    通过理解和运用这些知识点,你可以创建一个功能完善的评分系统,或者将它整合到更大的项目中,作为决策的一个部分。学习和掌握这些基础知识对于任何想要深入学习C语言或者其他编程语言的人来说都是至关重要的。

    Oracle创建Database link方法

    我们可以通过 PL/sql developer 图形化创建 Database link,或者通过 sqlplus 中的 sql 语句创建。 1. 通过 PL/sql developer 图形化创建 完成后点击“Apply”按钮即可创建成功。 2. 通过 sqlplus 中的 sql 语句...

    两个时钟单片机汇编程序

    7. **循环和分支语句**:在汇编程序中,循环(如DO-WHILE, FOR等)和条件分支(如IF-THEN-ELSE)用于控制程序流程,比如定期检查时间是否需要更新,或者判断用户是否有操作请求。 8. **调试技巧**:编写汇编程序时...

Global site tag (gtag.js) - Google Analytics