解决方案 »

  1.   

    NUll指针?你main里面怎么调用这个函数的?
      

  2.   

    System.out.println("MinOfArr="+FindMin(arr));
    这个有问题吗??
      

  3.   

    System.out.println("MinOfArr="+FindMin(arr));
    这个有问题吗??
    你传入的arrnew没?初始化吗必然是这里错了
      

  4.   

    public static int FindMin(int[] array) {
        int MinOfArray=array[0];
        for(int j=0;j<array.length;j++) {
            if(array[j]<MinOfArray)
            MinOfArray=array[j];
        }
        return MinOfArray;
    }
    这个方法改一下public static int FindMin(int[] array) {
        /* 不管你对调用方多么有信心,你都应该对传进来的参数做检查,应该对方法的执行做保证。抛出异常可以在出现问题时更容易定位,另外,如果你的array里肯定都是正整数,也可以通过return -1;的方式来告诉调用方这个方法执行出现了问题。 */
        if (array == null || array.length == 0) {
            throw new IllegalArgumentException("invalid argument array: " + array);
        }
        /* 这是前面做了array.length肯定大于0的检查了,你可以让minOfArray = array[0],但更好的方式是先赋一个极大值,这样即使没有检查,也不会出现数组越界。 */
        int minOfArray = Integer.MAX_VALUE; //局部变量通常首字母小写
        for(int j=0;j<array.length;j++) {
            if(array[j]<minOfArray)
            minOfArray=array[j];
        }
        return minOfArray;
    }
      

  5.   

    class Demo
    {
        public static void main(String [] args)
        {
            System.out.println(printx());
        }
     
        public static int printx()
        {
            int i=1;
            return i;
        }
     
    }我这样运行的,结果正确,除非你的传的数组 arr 有问题。程序本深身是没有问题的
      

  6.   

    class test
    {
        public static void main(String [] args)
        {
            System.out.println(printx());
            int[] my = {1,2,3,4};
            System.out.println("min" + FindMin(my));
        }    public static int printx()
        {
            int i=1;
            return i;
        }        public static int FindMin(int[] array)
            {
                    int MinOfArray=array[0];
                    for(int j=0;j<array.length;j++)
                    {
                        if(array[j]<MinOfArray)
                            MinOfArray=array[j];        //              System.out.println(j);
            //              System.out.println(array[j]);
                    }
                    return MinOfArray;
            }
    }
      

  7.   

    System.out.println("MinOfArr="+FindMin(arr));
    这个有问题吗??
    你传入的arrnew没?初始化吗必然是这里错了
    看看你的arr咯?
      

  8.   

    public class Demo3_3 { public static void main(String[] args) {
    // TODO Auto-generated method stub
    int array[]={1,4,5,6};
    System.out.println("MinOfArr="+FindMin(array));
    }
    public static int FindMin(int[] array)
        {
            int MinOfArray=array[0];
            for(int j=0;j<array.length;j++)
            {
                if(array[j]<MinOfArray)
                    MinOfArray=array[j];
            }
            return MinOfArray;
        }}
    我运行了一把,没问题啊
      

  9.   

    楼主,你把main函数的详细代码贴出来。或者自己和我说的情况比对一下。下面是我按照你的代码的三种声明数组的方式。package test; public class testx {      
      public static void main(String[] args) {      //   int[] arr = {1,2,3} ;  这种设置了值的情况是没有问题的。
    //   int[] arr  = new int[1]; 这种初期化了大小的也是没有问题的。
      int[] arr  = null;//这种就会抛出NullPointException
      System.out.println("MinOfArr="+FindMin(arr));
      }  
      public static int FindMin(int[] array)
        {
            int MinOfArray=array[0];
            for(int j=0;j<array.length;j++)
            {
                if(array[j]<MinOfArray)
                    MinOfArray=array[j];
            }
            return MinOfArray;
        }
    }  
      

  10.   

    System.out.println("MinOfArr="+FindMin(arr));
    这个有问题吗??
    你传入的arrnew没?初始化吗必然是这里错了
    这个必然初始化了!
      

  11.   

    System.out.println("MinOfArr="+FindMin(arr));
    这个有问题吗??
    你传入的arrnew没?初始化吗必然是这里错了
    这个必然初始化了!
    你把main贴出来,真相自知。
      

  12.   

    话说方法执行完毕后,栈内的局部变量就会消失,为什么还能返回给主调函数,在C或C++时,我总是十分注意不要返回局部变量,难道在Java中没有这个问题吗?
      

  13.   

    话说方法执行完毕后,栈内的局部变量就会消失,为什么还能返回给主调函数,在C或C++时,我总是十分注意不要返回局部变量,难道在Java中没有这个问题吗?千万不要用C++的思想来看Java,很多C++不能做的Java却可以,我理解你说的不返回局部变量,因为在C++里面函数结束之后局部变量就无法使用了,但Java不存在这个问题。比如,可以这么写:
        public int getSQLCount(String sql) throws Exception {
            conn = DBManager.getConnection();
            QueryRunner qr = new QueryRunner();
            Long countValue = (Long) qr.query(conn, sql, new ScalarHandler(1));
            int count = countValue.intValue();
            DBManager.closeConnection();
            return count;
        }
      

  14.   

    话说方法执行完毕后,栈内的局部变量就会消失,为什么还能返回给主调函数,在C或C++时,我总是十分注意不要返回局部变量,难道在Java中没有这个问题吗?千万不要用C++的思想来看Java,很多C++不能做的Java却可以,我理解你说的不返回局部变量,因为在C++里面函数结束之后局部变量就无法使用了,但Java不存在这个问题。比如,可以这么写:
        public int getSQLCount(String sql) throws Exception {
            conn = DBManager.getConnection();
            QueryRunner qr = new QueryRunner();
            Long countValue = (Long) qr.query(conn, sql, new ScalarHandler(1));
            int count = countValue.intValue();
            DBManager.closeConnection();
            return count;
        }

    受教了,谢谢
      

  15.   

    话说方法执行完毕后,栈内的局部变量就会消失,为什么还能返回给主调函数,在C或C++时,我总是十分注意不要返回局部变量,难道在Java中没有这个问题吗?千万不要用C++的思想来看Java,很多C++不能做的Java却可以,我理解你说的不返回局部变量,因为在C++里面函数结束之后局部变量就无法使用了,但Java不存在这个问题。比如,可以这么写:
        public int getSQLCount(String sql) throws Exception {
            conn = DBManager.getConnection();
            QueryRunner qr = new QueryRunner();
            Long countValue = (Long) qr.query(conn, sql, new ScalarHandler(1));
            int count = countValue.intValue();
            DBManager.closeConnection();
            return count;
        }

    受教了,谢谢请注意,C中从来没说不要把局部变量返回,而是不要把局部变量的指针返回,因为局部变量在栈中,一旦函数执行完成后,函数栈被弹出,指向栈中的变量的指针就失去意义,进入下一个函数时,该内存地址重新分配给别的变量,指针的内容就会出问题。但是,在C中返回局部变量的值是没有问题的,值被赋给了调用者的变量,是一个拷贝的过程。在C中返回指向堆空间的指针也是没有问题的。但是在java中,从来没有任何一个指针是指向栈空间的,因为java的栈中没有任何对象,全都是8种基本数据类型和引用,一共就这9种东西在栈里,你返回一个基本数据类型的变量,该变量的值被调用者接收拷贝,你要是返回一个对象的引用,则返回的是一个指向堆空间的引用,即使函数弹栈了,堆空间的地址仍然有意义。