标签:选择 方案
如果n是3,输入3个数字,求3个数的最大数:
第一种方案:
利用条件运算符来求解,条件运算符的格式是x?y:z
x是boolean类型表达式,如果x=true,
则整个条件运算符的结果是y的值,否则是z的值。(((a>b)?a:b))就是得到a,b中的最大值。
int a =1,b=2,c=3;
int h=(((a>b)?a:b)<c)?c:(((a>b)?a:b));
System.out.println("最大的数字是"+h);
第二种方案:
int a=1,b=2,c=3;
if (a>b&&a>c)
//&&是短路与(对逻辑与性能上面的提高)左边为false的时候就不再取计算右边。
{
System.out.println("最大的数是"+a);
}
else if (b>a&&b>c)
{
System.out.println("最大的数是"+b);
}
else if (c>a&&c>b)
{
System.out.println("最大的数是"+c);
}
第三种方案:
int a=1,b=2,c=3;
int max=a;
if(max<b)
{
max=b;
if(max<c)
{
max=c;
}
}
else if(max<c)
{
max=c;
if(max<b)
{
max=b;
}
}
System.out.println("最大的数是:"+max);
第四种方法,冒泡排序:
Scanner s = new Scanner(System.in);
//创建一个数组
int[] a=new int[3];
System.out.println("请输入3个数字:");
//为数组赋值
for (int i = 0; i < 3; i++)
{
a[i]=s.nextInt();
}
for (int i = 0; i < a.length-1; i++)
冒泡次数是 a.length-1,注意不是i < a.length.
{
for (int j = 0; j < a.length-1-i; j++)//对比的次数
//因为每次冒泡都减少一个对比数,为了减少计算机计算次数再减去i
{
if(a[j]>a[j+1])
// 如果a[j]>a[j+1],就前后换位,否则不换位.即把大的数字放到后面。
{
int temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;//设一个暂存的数值,用于换位
}
}
System.out.println("最大的数是:"+a[a.length-1]);
如果n=5,第一种方案就要修改:
int a =1,b=2,c=3;d=4,e=5;
int h=(((a>b)?a:b)<c)?c:(((a>b)?a:b));
int i=(((h>d)?h:d)<e)?e:(((h>d)?h:d));
System.out.println("最大的数字是"+i);
……
如果n的数值很大呢?一直这样一个个对比,显的相当不智能,冒泡排序与前几个方案对比,显得智能得多,创建数组,把要对比的数赋给数组,再冒泡排序(写好算法),最后打印出想要的结果即可。调理清晰,显然当n的数值较大的时是我们的最佳选择。
总结:
此时是求3个的数的最大数,前三个方案是优越于第四个冒泡排序的方案,第一种方案代码量最少,能最快速的解决问题,所以这时候我们应选择第一种解决方案,第二和第二种方案次之。第二,第三种方案在求比较少量的数字的最大值的时候,逻辑相对更清晰,但n值较大时,就不是最佳方案了。好比如果是求5个数字,甚至更多的数字的时候,前几种方案的代码书写就会显的很拖沓,冒泡排序的优势就明显了,比如无论是从为数字赋值的便利还是明确清晰的思路,还是既定而成的算法来说,都会是我们更好的选择。
选了非最佳的方案,也许你能完成任务,但也许是走了非常多的弯路,事倍功半。我们是不是也可以由此看出选择比努力重要呢?答案是肯定的。
本文出自 “JavaSE学习与总结” 博客,请务必保留此出处http://iamsmile.blog.51cto.com/10728276/1703987
"求n个数字中的最大值"的 多种方案,及对多种方案优缺点分析。
标签:选择 方案
原文地址:http://iamsmile.blog.51cto.com/10728276/1703987