黑马程序员技术交流社区
标题:
基础测试题有感,求解其他方案
[打印本页]
作者:
xt654005440
时间:
2013-7-27 10:14
标题:
基础测试题有感,求解其他方案
本帖最后由 xt654005440 于 2013-7-27 15:35 编辑
//题目——将int数组中的奇数放到一个新的int数组中返回
int[] arr = { 1,3,4,7,8,10,11,13,17,18,19,21,23};
ArrayList list = new ArrayList();
//判定数组中的奇数偶数
for (int i = 0; i < arr.Length; i++)
{
if (arr % 2 == 0)
continue;
else
list.Add(arr);
}
Console.WriteLine("所得的奇数数组为:\n");
//遍历所有的奇数
foreach(int a in list)
{
Console.WriteLine(a+" ");
}
Console.ReadKey();
初看C#书籍然后做了这道测试题,这其中我首先定义了一个已知的数组,然后使用集合的方法将数组中的元素逐一判定并且用Add方法加入到集合中;
但是做完后,我对这的解决方式还是不满意啊。其一,最初我是想
为什么我就一定的线定义一个已知的数组呢,而我想要输入数的时候随机输入如何实现
其二,对于使用集合有点无奈,其实开始是想也用数组着个数据类型却没有成,那么使用数组该怎么做呢。请有经验的马友教教我。
作者:
leayon
时间:
2013-7-27 11:25
static void Main(string[] args)
{
int[] Num = new int[10]; //定义随机数组
int[] oddNum = new int[10]; //定义奇数数组
Console.WriteLine("随机数组:");
Random random = new Random(); //利用随机数给数组赋值
for (int i = 0; i < Num.Length; i++)
{
Num[i] = random.Next(1, 100);
Console.Write(Num[i] + "\t"); //输出随机数组
}
int j=0; //奇数数组的下标
for (int i = 0; i < Num.Length; i++)
{
if (Num[i] % 2 == 0) //如果是偶数,就不执行后面的代码
{
continue;
}
oddNum[j] = Num[i]; //将奇数存入奇数数组中,注意这里一定不要用oddNum[i]=Num[i];
j++;
}
Console.WriteLine("奇数数组:");
for (int i = 0; i < oddNum.Length; i++) //输出奇数数组的值
{
if (oddNum[i] != 0) //这里要做一个限制,如果奇数数组里面的值有0,说明这个数组里面的奇数已经输出完毕
{
Console.Write(oddNum[i] + "\t");
}
}
Console.ReadKey();
}
复制代码
随机数组里面可能会有相同的值,加个条件判断就OK了!
作者:
黑骏马
时间:
2013-7-27 13:49
楼上好强,注释写得非常好,{:soso_e179:}
作者:
小天
时间:
2013-7-27 14:32
//将int数组中的奇数放到一个新的int数组中返回
int[] arr = { 1, 3, 4, 7, 8, 10, 11, 13, 17, 18, 19, 21, 23 };
int j = 0;//判断新数组长度的变量
//首先判断奇数数组的长度
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] % 2 != 0)
{
j++;
}
}
int []number=new int[j];//定义一个新的数组
j = 0;
//将符合条件的变量插入到新的数组中
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] % 2 != 0)
{
number[j]=arr[i];
j++;
}
}
//打印出新的数组
for (int i = 0; i< number.Length; i++)
{
Console.WriteLine(number[i]);
}
Console.ReadKey();
我觉得这道题首先要考虑的是新数组的长度,然后往新数组中插入符合条件的值。
作者:
xt654005440
时间:
2013-7-27 15:36
呵呵,感谢以上朋友,你们的方法我都试验过了,又有新的收获!
作者:
mzh901024
时间:
2013-7-27 18:33
也可以用构造方法实现 不过这道题没有给数组长度,还是要自己定义
作者:
孔健
时间:
2013-7-27 22:38
我的基础测试里刚做完这道题。我的做法可能稍微有些麻烦,不过也一块贴上来吧,共同学习嘛。
有不合理的地方请大家指出,谢谢!
namespace test6
{
class Program
{ // 将int数组中的奇数放到一个新的int数组中返回。
static void Main(string[] args)
{
int[] num = { 1, 36, 17, 8, 29, 46, 23, 101, 88, 66 };//定义一个int类型数组并初始化
//由于新数组的长度可能不是确定的,普通数组的长度不能动态增减而ArrayList可以动态改变数组的长度,所以选用可变长数组ArrayList来暂时存放奇数
ArrayList js = new ArrayList();
for (int i = 0;i < num.Length;i++)//遍历num数组中的每一个元素
{
if (num[i] % 2 == 1)//判断某个数是否是奇数
{
js.Add(num[i]);//如果某个数是奇数就使用ArrayList的Add方法将该数添加到ArrayList对象中
}
}
//使用ArrayList.ToArray()方法将ArrayList强制转换成一个新的int型数组(因为题目要求放到一个新的int数组中嘛)
int[] jishu = (int[])js.ToArray(typeof(int));
Console.WriteLine("数组中的奇数有:");
for (int i = 0; i < jishu.Length; i++)//遍历jishu数组
{
Console.Write(js+" ");//打印数组中的每一个元素,元素之间用空格隔开
}
Console.ReadKey();
}
}
}
作者:
gb2312_8
时间:
2013-7-29 11:21
本帖最后由 gb2312_8 于 2013-7-29 11:26 编辑
上面都解决了lz提的第二个问题,第一个问题我认为ilz是想自己输入一个数组,,我把第一问给写出来了:这样虽然有点走弯路了,但是实现功能了
class Program
{
//将int数组中的奇数放到一个新的int数组中返回
static void Main(string[] args)
{
List<int> list = new List<int>();//定义泛型接收用户输入的数(数组的长度不固定,选用泛型接收)
int s = 0;
do
{
Console.WriteLine("请输入一个数字:(输q结束)");
string str = Console.ReadLine();
if (str == "q")
{
if (s == 0)
{
Console.WriteLine("请至少输入一个数字,然后按q结束:");
continue;
}
else
{
break;
}
}
if (int.TryParse(str, out s))
{
list.Add(s);
}
else
{
Console.WriteLine("你输入的数字有误");
continue;
}
} while (true);
//题目让用数组,定义数组然后循环赋值
int[] shuZu = new int[list.Count()];
for (int i = 0; i < list.Count(); i++)
{
shuZu[i] = list[i];
}
//判断数组中奇数个数,定义奇数数组
int j = 0;
for (int i = 0; i < shuZu.Length; i++)
{
if (shuZu[i] % 2 != 0)
{
j++;
}
}
int[] jishuShuzu = new int[j];//定义奇数数组
j = 0;
for (int i = 0; i < shuZu.Length; i++)//给奇数数组赋值
{
if (shuZu[i] % 2 != 0)
{
jishuShuzu[j++] = shuZu[i];
}
}
foreach (int item in jishuShuzu)//循环打印输出
{
Console.WriteLine(item);
}
Console.ReadKey();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2