- /*
- 你的代码不难看出,你定义一个int b = 0;比较数组中第一位是否比第二位小,如果成立,b = 第二位.
- */
- class Ti {
- public static void main(String[] args) {
- int [] a = {-1,-4,-5,-2,-7,-8};
- int z = pu( a );
- System.out.println(z);
- }
- public static int pu(int [] a) {
- int b = 0;
- for(int x = 0;x < a.length -1;x++ ){
- /*
- 分析你的代码:
- 你是这样比较的: 0和1 1和2 2和3 3和4 4和5 (数字代表角标)
- 假设:第一次进来a[x] < a[x+1] 成立,此时b=a[x+1];
- 第二次进来a[x] < a[x+1] 不成立,此时b不动;(有可能不成立吧,此时的b指向的值可能是最大的)
- 第三次进来a[x] < a[x+1]成立,此时b=a[x+1];(此时b取到的数跟第一次有没有联系?换言之就是第一次b取到的值和第三次取到的值都没有比较)
- 解决方法:
- 要求最值其实很简单,假设法:
- 假设数组第一位是最大(最小),每次把角标0的数去和角标1以上的的数对比,
- 如果发现角标0的数大,则不动,否则让b去取;
- */
- if(a[x] < a[x+1]){
-
- b = a[x + 1];
-
- }
-
- }
- return b;
- }
- //实现代码:
- class MaxMinTest
- {
- public static void main(String[] args){
- int [] a = {-1,-4,-5,-2,-7,-8};
- }
- //求最大值
- public int max(int[] arr){
-
- if(arr == null)
- throws new NullPointerException();
- //假设第一位为最大值
- int max = arr[0];
- //从第二位开始比较
- for(int i=1;i<arr.length;i++){
- if(max < arr[i]){
- max = arr[i];
- }
- }
- return max;
- }
- //求最小值
- public int max(int[] arr){
-
- if(arr == null)
- throws new NullPointerException();
- //假设第一位为最大值
- int max = arr[0];
- //从第二位开始比较
- for(int i=1;i<arr.length;i++){
- if(max > arr[i]){
- max = arr[i];
- }
- }
- return max;
- }
- }
复制代码 |