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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 奔跑的胖子 于 2013-11-3 17:56 编辑

如果不能问有关入学测试的话,版主可以删帖哦,不会介意的

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

9 个回复

倒序浏览
//将int数组中的奇数放到一个新的int数组中返回。
int[] num = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            int[] newNum = new int[num.Length];
            int j=0;
            for (int i = 0; i < num.Length; i++)
            {
                if (num[i] % 2 == 1)
                {
                    newNum[j] = num[i];
                    j++;
                }
               
            }
            for (int i = 0; i < newNum.Length; i++)
            {
                if (newNum[i] != 0)
                {
                    Console.Write(newNum[i] + " ");
                }
            }
            Console.ReadKey();
这题要求放到新数组中,但是我的新数组后面还有很多0元素。想问这样算对吗
回复 使用道具 举报
这个题,我是这样做的,你可以参考一下:

    class Program
    {
        //7、 将int数组中的奇数放到一个新的int数组中返回。
        static void Main(string[] args)
        {
            //声明一个原数组
            int[] intSource = new int[] {10,4,2,3,7,89,5,9,0,6,8,9};
            
            //声明一个存放奇数的数组
            int[] intJ;

            //声明一个可变数组,用于存找到的奇数
            System.Collections.ArrayList ar = new System.Collections.ArrayList();

            //找到奇数并且将其存到arraylist中
            for (int i = 0; i < intSource.Length; i++)
            {
                if (intSource[i] % 2 != 0)
                {
                    ar.Add(intSource[i]);
                }
            }
            //将arrayList中的奇数保存到intJ中

            if (ar.Count <= 0)
            {
                Console.WriteLine("不存在奇数!");
                return;
            }

            intJ=new int[ar.Count];

            for (int i = 0; i < ar.Count; i++)
            {
                intJ[i] = Convert.ToInt32(ar[i]);
            }

            //原数据输出
            Console.Write("您的原始数据是:"+intSource[0]);

            for (int i = 1; i < intSource.Length; i++)
            {
                Console.Write(","+intSource [i]);
            }
            Console.WriteLine();

            //奇数数据输出
            Console.Write("其中奇数的是:" + intJ[0]);

            for (int i = 1; i < intJ.Length; i++)
            {
                Console.Write("," + intJ[i]);
            }
            Console.ReadKey();
        }
    }
回复 使用道具 举报
黑飞马 发表于 2013-11-3 15:50
这个题,我是这样做的,你可以参考一下:

    class Program

嗯嗯,谢谢啦,可是我记得看视频没看到 System.Collections.ArrayList ar = new System.Collections.ArrayList();
这个声明方法,你能给我推荐个比较好视频或者其他的链接吗,谢谢啦,还有我这样写你觉得能给分吗,我心里没底啦
回复 使用道具 举报
奔跑的胖子 发表于 2013-11-3 15:57
嗯嗯,谢谢啦,可是我记得看视频没看到 System.Collections.ArrayList ar = new System.Collections.Arra ...


我下面给说一下C#动态数组的详解介绍,你看看对你有没有帮助

C#动态数组对象是较为复杂的数组。我们可以将它看为扩充了功能的数组,但ArrayList并不等同于数组,与数组相比,它以下功能和区别是什么呢?让我们来看看具体的内容吧:

1.数组的容量是固定的,但ArrayList的容量可以根据需要自动扩充。当我们修改了ArrayList的容量时,则可以自动进行内存重新分配和元素复制,比如往1号索引位插入n个元素,插入后,元素的索引依次向后n个位置排列,它是动态版本的数组类型。

2.ArrayList提供添加、插入或移除某一范围元素的方法。但是在数组中,只能一次获取或设置一个元素的值,如利用索引赋值。

3.ArrayList只有一维,而数组可以是多维。

如何声明一个C#动态数组呢?

ArrayList AL=new ArrayList( Capacity );
//初始容量capacity也是可以不写的

原因就是即使不在初识化确定容量,容量不够的时候,会自动的按倍数作扩充。

C#动态数组的常用属性

Capacity

获取或设置ArrayList可包含的元素数。

Count

获取ArrayList中实际包含的元素数。

IsReadOnly

获取一个值,该值表示ArrayList是否为只读。

Item

获取或设置指定索引处的元素。

C#动态数组的常用方法

增加元素-ArrayList.Add(value);利用Add方法增加集合元素值

我们也可以索引增加元素ArrayList[Index]=value;

插入元素-ArrayList.Insert(Index,value);将元素的值value,插入到第Index位置。

删除元素-ArrayList.Clear(); 全部删除集合中的元素

ArrayList.Remove(value);按照集合元素值删除元素

ArrayList.RemoveAt(Index);按照集合的元素索引删除元素

缩减容量-ArrayList.TrimToSize();将集合的容量减少到实际元素个数的大小

在执行删除操作后,要养成良好的缩减容量的习惯,节省内存空间,提高性能。

查找元素-除了按数组的索引查找外,还可以用ArrayList.Contains(value);按照元素值查找集合,如果包含便返回True,不包含时返回False。

C#动态数组的基本情况就向你介绍到这里,希望对你学习和了解C#动态数组有所帮助。
回复 使用道具 举报
LZ的思路没问题,只是无法判断新数组的长度是多少,导致后面很多默认为0的整形值。可以试试动态数组,动态数组不需要首先申明长度为多少,可以动态添加。比如List<int>...
         int[] num = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
          //  int[] newNum = new int[num.Length];
            List<int> newNum = new List<int>();
          //  int j = 0;
            for (int i = 0; i < num.Length; i++)
            {
                if (num[i] % 2 == 1)
                {
               //     newNum[j] = num[i];
              //      j++;
                    newNum.Add(num[i]);
                }

            }
            for (int i = 0; i < newNum.Count ; i++)
            {
              //  if (newNum[i] != 0)
              //  {
                    Console.Write(newNum[i] + " ");
              //  }
            }
            Console.ReadKey();
回复 使用道具 举报
黑飞马 发表于 2013-11-3 16:06
我下面给说一下C#动态数组的详解介绍,你看看对你有没有帮助

C#动态数组对象是较为复杂的数组。我们可 ...

嗯嗯,我会好好看看的,谢谢啦
回复 使用道具 举报
dashanren 发表于 2013-11-3 16:08
LZ的思路没问题,只是无法判断新数组的长度是多少,导致后面很多默认为0的整形值。可以试试动态数组,动态 ...

嗯嗯,谢谢啦,我还是改了吧,怕丢分呐
回复 使用道具 举报
C#中的是不支持动态数组的,想要向数组中动态添加元素需要用到ArrayList,调用这个类对象的Add方法(一次添加一个元素)或者AddRange方法(一次添加多个元素)。楼上的解法就是这样子的,你可以参考一下。

然后你的做法也没有错,只是代码中你在申明新数组的时候,新数组的长度为num.Length,也就是原来数组的长度,同时这个操作还将数组中的每个元素初始化为0;所以后来你对newNum数组再赋值的时候,将新数组前j个元素分别指向了num数组中的奇数元素地址。

遍历输出的时候只要输出到第就个元素就可以了。

在你的代码上改了一下:
  1.     {
  2.         static void Main(string[] args)
  3.         {
  4.             int[] num = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  5.             int[] newNum = new int[num.Length];
  6.             int j = 0;
  7.             for (int i = 0; i < num.Length; i++)
  8.             {
  9.                 if (num[i] % 2 != 0)
  10.                 {
  11.                     newNum[j] = num[i];
  12.                     j++;
  13.                 }
  14.             }

  15.             Console.WriteLine("新数组中的奇数元素为:");
  16.             for (int i = 0; i < j; i++) //只输出新数组中的奇数元素,从第j个元素之后均不输出
  17.             {
  18.                 Console.WriteLine(newNum[i]);
  19.             }
  20.             Console.ReadKey();
  21.         }
  22.     }
复制代码
回复 使用道具 举报
上面每位都说的很好,也很全面了。
用动态数组 List<> 也可以的,这个也有add();方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马