java 取最大值数字_"求n个数字中的最大值"的 多种方案,及对多种方案优缺点分析。...

如果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)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

{

max=b;

if(max

{

max=c;

}

}

else if(max

{

max=c;

if(max

{

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)b)?a:b));

int i=(((h>d)?h:d)d)?h:d));

System.out.println("最大的数字是"+i);

……

如果n的数值很大呢?一直这样一个个对比,显的相当不智能,冒泡排序与前几个方案对比,显得智能得多,创建数组,把要对比的数赋给数组,再冒泡排序(写好算法),最后打印出想要的结果即可。调理清晰,显然当n的数值较大的时是我们的最佳选择。

总结:

此时是求3个的数的最大数,前三个方案是优越于第四个冒泡排序的方案,第一种方案代码量最少,能最快速的解决问题,所以这时候我们应选择第一种解决方案,第二和第二种方案次之。第二,第三种方案在求比较少量的数字的最大值的时候,逻辑相对更清晰,但n值较大时,就不是最佳方案了。好比如果是求5个数字,甚至更多的数字的时候,前几种方案的代码书写就会显的很拖沓,冒泡排序的优势就明显了,比如无论是从为数字赋值的便利还是明确清晰的思路,还是既定而成的算法来说,都会是我们更好的选择。

选了非最佳的方案,也许你能完成任务,但也许是走了非常多的弯路,事倍功半。我们是不是也可以由此看出选择比努力重要呢?答案是肯定的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值