A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 尹丽峰 于 2013-5-29 16:39 编辑

public static int[] method(int[] x)//需求就是 一个数组传进来通过遍历改变数组中的元素值然后再返回去另外一个数组(新数组),是数组不是元素;
{
      遍历后的元素值都加1
          return x数组加1后的新数组 ;//亲,不要告诉我返回一个数组对象,这我知道。
}

评分

参与人数 1技术分 +2 黑马币 +3 收起 理由
袁梦希 + 2 + 3 赞一个!

查看全部评分

10 个回复

倒序浏览
本帖最后由 袁梦希 于 2013-5-29 09:22 编辑

楼猪你好:
其实这个题你定义的返回值类型是int[],所以return后面应该返回的是int[]类型的值。

既然遍历有输出语句System.out.println();  那么定义返回值就没有意义了,如果你遍历了x数组
如果在返回x数组,那么就没有意义了。所以应该定义空值
  1. public class ReturnDemo {

  2. public static void main(String[] args) {

  3. int[] arr = {3,4,63,34,26,1};
  4. method(arr);

  5. }

  6. public static void method(int[] arr){

  7. for (int i : arr) {

  8. System.out.print(i+1+",");
  9. }
  10. }
  11. }
复制代码
如果遍历按照楼主的说法,传进数组,返回数组,那么应该还是原来的数组,本来你想遍历数组,给数组拆开并且打印里面的内容,那你还要返回数组吗?
  1. public static int[] method(int[] arr){

  2. for (int i : arr) {

  3. System.out.print(i+1+",");
  4. }

  5. return arr;
  6. }
复制代码
在开发中大多数是有输出语句就没有返回值,有返回值的就没有输出语句,这是毕老师讲过的。
回复 使用道具 举报
package com.itcast;

public class Test {
        public static void main(String[] args) throws Exception
        {
                 int[] arry={1,2,3,4,5,6,7};
                 ForeachArry fa=new ForeachArry();
                 fa.setArry(arry);
                 fa.foreccharry(arry);
        }

  
}

class ForeachArry
{
        int[] arry=null;

        public int[] getArry() {
                return arry;
        }

        public void setArry(int[] arry) {
                this.arry = arry;
        }
        public static  int[] foreccharry(int[] arry)
        {
                for(int i=0;i<arry.length;i++)
                {
                        System.out.println(arry[i]);
                }
                return arry;
        }
       
}

搂住你好好看一下,我根据你的要求写了一下,返回值和你的遍历有什么关系呢?

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
  1. public class Array {

  2.         public static void main(String[] args) {
  3.                 int[] array = new int[] { 1, 2, 3, 4 };// 定义数组
  4.                 array = method(array);// 调用函数改变数组中的值
  5.         for (int i = 0; i < array.length; i++) {
  6.                         System.out.print(array[i]);// 通过遍历输出数组的元素
  7.                 }
  8.         }

  9.         public static int[] method(int[] array) {// 接收一个数组
  10.                 for (int i = 0; i < array.length; i++) {
  11.                         array[i] = array[i] + 1;// 通过遍历给数组中的元素增加1
  12.                 }
  13.                 return array;// 返回数组
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
穆爱明 发表于 2013-5-29 09:46

Good!  So beautiful!!{:2_42:}
回复 使用道具 举报
返回数组的地址,也就是数组对象的引用,
这样不就是同一个数组吗。

点评

前面的答案都在同一个数组上,我需要的是数组a 改变后 返回数组b a和b地址值不能相同  发表于 2013-5-29 10:06
回复 使用道具 举报
占个楼  再解答
回复 使用道具 举报
本帖最后由 谢孔营 于 2013-5-29 11:18 编辑
谢孔营 发表于 2013-5-29 09:55
返回数组的地址,也就是数组对象的引用,
这样不就是同一个数组吗。

哦,这样啊。
楼主可以把方法里的自定义的数组引用返回,外面用一个数组接受就OK了。
具体程序如下。
public static int[] method(int[] x)//需求就是 一个数组传进来通过遍历改变数组中的元素值然后再返回去另外
{
int  [] a = new a[x.length];
for( int i = 0 ;i<x.length;i++){
a = x+1;//中括号出不来x  a
}
return a;
}

    }
回复 使用道具 举报
哦,这样啊。
楼主可以把方法里的自定义的数组引用返回,外面用一个数组接受就OK了。
具体程序如下。
public static int[] method(int[] x)//需求就是 一个数组传进来通过遍历改变数组中的元素值然后再返回去另外
{
int  [] a = new a[x.length];
for( int i = 0 ;i<x.length;i++){
a[i] = x[i]+1;
}
return a;
}

    }

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
本帖最后由 袁梦希 于 2013-5-29 14:05 编辑

其实这道题很久技术水平,我给了2分。
首先这道题,我刚开始以为传int[] ,返回int[]根本不科学,其实如果我们硬要实现,也是可以的。

后来看楼上几个哥们答的都是改变了同一个数组,也不是楼主想要的,那么我给大家看看我的代码。
我不知道楼主说的不能返回同一个数组的意思是,内存首地址相同的数组还是就是一模一样的数组,所以我下面分析了一下。
System.out.println(arr == newArr);返回false,内存首地址变了,证明不是同一个数组了,而楼上穆爱明回答的仍然是同一个数组。


思路:①:遍历当前数组,然后把遍历的数据逐个+1放进list集合中。因为数组很难改变,所以我们要利用集合
           ②:我们再获取集合中存好的数据,逐个动态初始化数组,再返回新的数组,实现效果。
           ③:这道题我曾经想过把list集合直接变int[]数组,但是不行,集合变数组的方法是toArray(),这是错误的,
           返回的是Object[]类型,而int[]是基本数据类型。如果变为字符串数组(String[])是可以的。因为String[]属于Object[]类型。
           ④:这道题也可以当做集合变int[]型数组来参考
  1. import java.util.ArrayList;
  2. import java.util.List;


  3. public class ReturnDemo {

  4.                public static void main(String[] args) {

  5.                ReturnDemo rd = new ReturnDemo();

  6.                int[] arr = {3,4,63,34,26,1};

  7.                int[] newArr = rd.method(arr); //接收返回过来的新数组

  8.                for (int i : newArr) {
  9.              //功能实现了,在这里就不美化了。
  10.                System.out.print(i+",");
  11.                }
  12. }

  13. public int[] method(int[] arr){

  14.               List<Integer> list = new ArrayList<Integer>();

  15.               for (int i : arr) {

  16.               list.add(i+1); //把要实现的代码
  17.               }

  18.               int[] newArr = new int[list.size()]; //动态初始化新数组

  19.               //注意:这里我们不用增强for循环,因为要操作角标。
  20.               for (int i = 0; i < newArr.length; i++) {

  21.               newArr[i] = list.get(i); //取出集合中的元素,逐个放到新数组里面

  22.               }

  23.               return newArr; //返回int[]类型的新数组
  24.        }
  25. }
复制代码




还有一种简单方法我就不细说了,我只是给大家演示集合怎样转变成为int[]类型的数组。

希望可以帮助楼主解决问题


____________________菜鸟云青年为您解答

评分

参与人数 2技术分 +2 黑马币 +2 收起 理由
曹睿翔 + 2 劳神了
神之梦 + 2 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 Just_Only 于 2013-5-29 14:02 编辑

楼主不知道这是不是你想要的。
  1. class Test
  2. {
  3.     public static void main(String[] args)
  4.         {
  5.                 int[] arr = {3,4,63,34,26,1};
  6.                 int[] newarr=method(arr);
  7.                 for(int i:newarr)
  8.                         System.out.print(i+",");
  9.         }
  10.         public static int[] method(int[] arr)
  11.         {
  12.                 int[] newarr=new int[arr.length];
  13.                 for(int i=0;i<arr.length;i++)
  14.                 {
  15.                         newarr[i]=arr[i]+1;
  16.                 }
  17. System.out.println(newarr.equals(arr));//结果是false
  18.                 return newarr;
  19.         }
  20. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 这个是我看着舒畅的

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马