我有一个数组,TempArray [] = {1,3,-1,5,7,-1,4,10,9,-1}
我想从这个数组中删除每一个-1并将剩下的数组复制到一个名为Original的新数组中,该数组应输出数字为1,3,5,7,4,10,9
我只能在for循环中使用if语句!
这是我到目前为止所做的,但我一直收到一条错误消息,System.IndexOutOfRangeException
for (int i = 0; i < TempArray.Length; i++)
{
if (TempArray[i] != -1)
{
//error occurs at this line
//My attempt is to set the new array, Original[i] equal to TempArray[i] only where the values are not -1.
TempArray[i] = Original[i];
}
}
答案 0 :(得分:3)
如果只能在for循环中使用If语句。这看起来像一个学校项目。首先,计算阵列中有多少非负数。创建具有该长度的新数组并填充该数组。
int[] TempArray = new int[] {1,3,-1,5,7,-1,4,10,9,-1};
int[] Original ;
int countNonNegative=0;
for (int i = 0; i < TempArray.Length; i++)
{
if (TempArray[i] != -1)
{
countNonNegative++;
}
}
Original = new int[countNonNegative];
int index=0;
for (int i = 0; i < TempArray.Length; i++)
{
if (TempArray[i] != -1)
{
Original[index] = TempArray[i];
index++;
}
}
Console.WriteLine("Original Length = "+Original.Length);
答案 1 :(得分:2)
using System.Linq;
int[] withoutNegativeOnes = myArray
.Where(a => a != -1)
.ToArray();
答案 2 :(得分:1)
var Original = new int[TempArray.Length];
var originalCounter = 0;
for (int i = 0; i < TempArray.Length; i++)
{
if (TempArray[i] != -1)
{
Original[originalCounter++] = TempArray[i];
}
}
现在Original
可能在末尾包含空格,但是你拥有的所有元素都不是-1。您可以使用以下代码迭代值:
for (int i = 0; i < originalCounter; i++)
{
Console.WriteLine(Original[i]);
}
那是因为originalCounter
的最后一个索引值没有从TempArray
的迭代中填充。
答案 3 :(得分:-1)
尝试这个
int[] TempArray = { 1, 3, -1, 5, 7, -1, 4, 10, 9, -1 };
int[] original = TempArray.Where(i => i != -1).ToArray();
foreach(int i in original)
Console.WriteLine(i.ToString());