黑马程序员技术交流社区

标题: 一个数组求最大值问题 [打印本页]

作者: 聖手`书生    时间: 2013-5-16 21:24
标题: 一个数组求最大值问题
本帖最后由 聖手`书生 于 2013-5-23 09:19 编辑

各位大神,兄弟我写了个求整型数组最大值的方法,只要将整型数组传进去就OK了

但是现在有个需求,能够实现传入数字类型的数组都能完成该方法(也就是能同时传int,double,long,float 都可以),现在想破脑筋都没弄出来,帮忙求解。

        public static int getMax_2(int[] arr){
               
                int max = 0;
                for(int x=1; x<arr.length; x++)
                {
                        if(arr[x]>arr[max])
                                max = x;
                }
                return arr[max];
作者: 袁梦希    时间: 2013-5-16 21:31
你说的是什么意思   我没理解   能再复述一遍吗
作者: 神之梦    时间: 2013-5-16 21:38
袁梦希 发表于 2013-5-16 21:31
你说的是什么意思   我没理解   能再复述一遍吗

我也没理解改方法是啥,跟着大佬走:lol
作者: 袁梦希    时间: 2013-5-16 21:39
神之梦 发表于 2013-5-16 21:38
我也没理解改方法是啥,跟着大佬走

不用叫大佬    叫兄弟就行   :handshake
作者: 逝者轨迹    时间: 2013-5-16 22:00
数字类型? 不是char或者 Sring?
作者: 王婷婷    时间: 2013-5-16 22:19
整型类型数组的数据 不是 数字嘛?int[] arr={2,5,8,9,11,23};
2 5 8 9 11 23
作者: 曹睿翔    时间: 2013-5-16 22:25
哎,这么说吧,你传进去一个Object[] obj 的数组
String s = obj.getClass().getComponentType().toString();//就是说,获取obj的字节码,然后获取数据类型,然后获取字符串
然后就用if else 语句判断是不是数字类型的数组,或者是String,或者其他对像,看你扩展了
作者: 聖手`书生    时间: 2013-5-16 22:46
曹睿翔 发表于 2013-5-16 22:25
哎,这么说吧,你传进去一个Object[] obj 的数组
String s = obj.getClass().getComponentType().toString( ...

你好,这个Object好像不能代替基本数据类型把。
作者: 聖手`书生    时间: 2013-5-16 22:49
袁梦希 发表于 2013-5-16 21:31
你说的是什么意思   我没理解   能再复述一遍吗

修改了,请再看看
作者: 聖手`书生    时间: 2013-5-16 22:50
神之梦 发表于 2013-5-16 21:38
我也没理解改方法是啥,跟着大佬走

修改了,请帮忙看看
作者: 聖手`书生    时间: 2013-5-16 22:50
袁梦希 发表于 2013-5-16 21:39
不用叫大佬    叫兄弟就行

修改了,帮忙看看
作者: 聖手`书生    时间: 2013-5-16 22:51
逝者轨迹 发表于 2013-5-16 22:00
数字类型? 不是char或者 Sring?

我说的数字类型并不是说某种数据类型。而是说 int, float,double,long 等类型,都是数字的   题目修改了,帮忙看看
作者: 聖手`书生    时间: 2013-5-16 22:51
王婷婷 发表于 2013-5-16 22:19
整型类型数组的数据 不是 数字嘛?int[] arr={2,5,8,9,11,23};
2 5 8 9 11 23

美女,你说的这种整型的我懂,需求修改了,你帮忙看看
作者: 曹睿翔    时间: 2013-5-20 10:53
你的问题我也碰到了,我又问了下黄玉坤,他给出了一个很好的解释
通过查看API文档发现
比如Arrays包中有toString方法。传入的参数是八种基本数据类型和其他类。函数之间以重载形式出现。基本数据类型毕竟不是对像,操作起来不方便,不然要那么多基本数据类型封装类干嘛
还有一个思路就是传入Object obj 这个参数接收数组引用。然后获取字节码文件,判断是不是数组,然后获取 数组类型和长度,本想还原这个数组可是还是接收不了,看来以后才能解决了
作者: 何俊森    时间: 2013-5-21 17:11

  1. public class NumberTest {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 // TODO Auto-generated method stub
  7.                 Number[] num = {90.1d, 20.6f, 12, 200L};
  8.                 double max = 0;
  9.                
  10.                 for(int i=0 ; i<num.length; i++){
  11.                         if(num[i] instanceof Integer){
  12.                                 if(max < num[i].intValue()){
  13.                                         max = num[i].intValue();
  14.                                 }
  15.                         }
  16.                         if(num[i] instanceof Double){
  17.                                 if(max < num[i].doubleValue()){
  18.                                         max = num[i].doubleValue();
  19.                                 }
  20.                         }
  21.                         if(num[i] instanceof Float){
  22.                                         max = num[i].floatValue();
  23.                         }
  24.                         if(num[i] instanceof Long){
  25.                                 if(max < num[i].longValue()){
  26.                                         max = num[i].longValue();
  27.                                 }
  28.                         }
  29.                 }
  30.                 System.out.println(max);
  31.                 /*for(int i = 0; i<num.length; i++){/或者直接把所有数字当做精度最高double类型
  32.                         if(max < num[i].doubleValue()){
  33.                                 max = num[i].doubleValue();
  34.                         }
  35.                 }
  36.                 System.out.println(max);*/
  37.         }

  38. }
复制代码
楼主是不是这个意思啊,数字型数组里的有int,double,long,float类型

作者: 袁梦希    时间: 2013-5-21 17:15
大家很给力 加油吧
作者: 刘正祥    时间: 2013-5-21 18:36
"能够实现传入数字类型的数组都能完成该方法(也就是能同时传int,double,long,float 都可以)"

如果说是单个变量类型,往一个方法中传参数,可以将方法的参数定义为精度最高的double类型  返回也是double,应用的时候再强转一下!

要是数组的话,试过Object[],double[],Number[] 都没成功。

好像关键是参数传入的问题。
作者: 胡浩    时间: 2013-5-22 12:33
如果是这样的,应该穿一个长度最长的类型,double类型,然后在数组中进行强制转换
作者: Changer_s    时间: 2013-5-22 12:46
何俊森 发表于 2013-5-21 17:11
楼主是不是这个意思啊,数字型数组里的有int,double,long,float类型

这样写?呵呵,牛逼,问你一个问题,怎么把代码截上去了呀?我只能上传文本
作者: Changer_s    时间: 2013-5-22 12:53
本帖最后由 Changer_s 于 2013-5-22 12:57 编辑

我个人感觉的话,你找一找基本类型_数组的父类,也就是Object!它如何遍历呢?这个问题看这个静态方法
private static void printObject(Object obj) {
                Class cls = obj.getClass();
                //判断obj是否是数组
                if(cls.isArray()){
                        int len = Array.getLength(obj);
                        for (int i = 0; i < len; i++) {
                                System.out.println(Array.get(obj, i));
                        }
                }else{
                        System.out.println(obj);
                }

我只能做到遍历,现在没时间研究这个了,要上课了,回来再探讨一下呗!!!嘿嘿
作者: 赵利斌    时间: 2013-5-22 23:17
不知道这样算不算对呢?我这里只做了int和float的,其他的照葫芦画瓢
代码:
import java.util.Arrays;

public class ters {
        public static void main(String[]  args)
        {
                int[] array={1,4,60,23,0};
                float[] array1={1.2f,3.4f,12.6f,0.1f};
                System.out.println("排序前");
                printArray(array);
       
                printArray(array1);

                System.out.println("自带排序");
                Arrays.sort(array);

                Arrays.sort(array1);
                printArray(array);
       
                printArray(array1);
                System.out.println("最大值="+array[array.length-1]);
                System.out.println("最大值="+array1[array1.length-1]);
        }
        //打印数组
        public static void printArray(int[] array)
        {
                for(int x=0;x<array.length;x++)
                {
                        System.out.print(array[x]+" ");
                }
                System.out.println();
        }
        public static void printArray(float[] array)
        {
                for(int x=0;x<array.length;x++)
                {
                        System.out.print(array[x]+" ");
                }
                System.out.println();
        }
}

class  Array
{
        int[] num;
        float[] num1;
        Array(int[] num)
        {
                this.num=num;
        }
        Array(float[] num)
        {
                this.num1=num;
        }
}
作者: 曹睿翔    时间: 2013-5-22 23:17
问题解决就再次编辑更改问题类型,没有解决继续追问
作者: 赵利斌    时间: 2013-5-22 23:19
我的思路是先把一个数组排序,然后取最大值,我这里是按升序排好,取最后一个值,这样可以取到最大值的,不管你上面类型吧,数值类型的都没问题呀。
作者: Changer_s    时间: 2013-5-22 23:28
赵利斌 发表于 2013-5-22 23:17
不知道这样算不算对呢?我这里只做了int和float的,其他的照葫芦画瓢
代码:
import java.util.Arrays;

这个想法挺好,我个人感觉可行,等一下我就下去试试
作者: 赵利斌    时间: 2013-5-22 23:44
好就行,斑竹给分不?

作者: 何俊森    时间: 2013-5-23 18:30
Changer_s 发表于 2013-5-22 12:46
这样写?呵呵,牛逼,问你一个问题,怎么把代码截上去了呀?我只能上传文本 ...

编辑里的高级模式里有贴代码的功能
作者: 821728010    时间: 2013-5-23 20:27
class Shuzu<T>{
       
public T getMax_2(T[] arr){
            int max = 0;
            for(int x=1; x<arr.length; x++)
            {
                    if(arr[x]>arr[max])
                            max = x;
            }
            return arr[max];
}
}
我尝试用泛型解决,eclipse提示“if语句”后面括号中的判断错误,意思应该是说“没有定义类型的数组成员不能进行大小的比较”
作者: 曹睿翔    时间: 2013-5-23 20:52
821728010 发表于 2013-5-23 20:27
class Shuzu{
       
public T getMax_2(T[] arr){

这个问题用泛型也不好使
作者: 曹睿翔    时间: 2013-5-23 21:29
http://bbs.itheima.com/thread-50853-1-2.html
作者: 821728010    时间: 2013-5-23 21:46
曹睿翔 发表于 2013-5-23 20:52
这个问题用泛型也不好使

必须不好使,编译不用说了,直接红色下划线提示错误!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2