C# 如何阻止0出现在数组中
所以我有一个方法,它返回一个数的因子数组C# 如何阻止0出现在数组中,c#,.net,C#,.net,所以我有一个方法,它返回一个数的因子数组 Tools.cs public static long[] GetFactors(long number) { long range = number / 2; long potentialFactors = 2; long[] factors = new long[range + 1]; factors[0] = 1; factors[range] = number; for (long i = 1; i
Tools.cs
public static long[] GetFactors(long number)
{
long range = number / 2;
long potentialFactors = 2;
long[] factors = new long[range + 1];
factors[0] = 1;
factors[range] = number;
for (long i = 1; i < range; i++)
{
if (number % potentialFactors == 0)
{
factors[i] = potentialFactors;
potentialFactors++;
} else
{
potentialFactors++;
}
}
Console.WriteLine($"here are the factors for the number {number}:\n"+string.Join("\n", factors));
return factors;
}
static void Main(string[] args)
{
Tools.GetFactors(24);
Console.ReadLine();
}
但当我运行代码时,会出现以下情况:
here are the factors for the number 24:
1
2
3
4
0
6
0
8
0
0
0
12
24
如何阻止0出现,我应该重写“for”循环,还是有办法从数组中删除0?您正在分配一个固定大小的数组,并且仅当元素是因子时才将其设置为非零
您应该改为使用
var factors=new List()代码>和调用因子。添加(潜在因子)
仅存储有效因子的数字。您正在分配一个固定大小的数组,并且仅当元素是因子时才将其设置为非零
您应该改为使用var factors=new List()代码>和调用因子。添加(潜在因子)
仅存储有效因子的数字。此代码使用的是列表
而不是数组
,还有一些其他更改
public static List<long> GetFactors(long number)
{
long range = number / 2;
List<long> factors = new List<long>() { 1 };
for (long i = 2; i <= range; i++)
{
if (number % i == 0)
{
factors.Add(i);
}
}
factors.Add(number);
Console.WriteLine($"here are the factors for the number {number}:\n" + string.Join("\n", factors));
return factors;
}
公共静态列表GetFactors(长数字)
{
远程=数字/2;
列表因子=新列表(){1};
对于(长i=2;i此代码使用List
而不是Array
,并且还有一些其他更改
public static List<long> GetFactors(long number)
{
long range = number / 2;
List<long> factors = new List<long>() { 1 };
for (long i = 2; i <= range; i++)
{
if (number % i == 0)
{
factors.Add(i);
}
}
factors.Add(number);
Console.WriteLine($"here are the factors for the number {number}:\n" + string.Join("\n", factors));
return factors;
}
公共静态列表GetFactors(长数字)
{
远程=数字/2;
列表因子=新列表(){1};
对于(长i=2;i我同意当你事先不知道你将得到多少因子时,列表会更好。但是如果你真的想使用数组。你可以在这个数组中循环,逐个找到0,然后它们留下数字。就像这样:
// Extension Method of array
public static void RemoveAllZeros(this long[] array) // O(N^2)
{
for (int i = 0; i < array.Length; i++)
{
if (array[i] == 0)
{
// Grab the index override value and continue swift left
for (int j = i; j < array.Length - 1; j++)
{
array[j] = array[j + 1];
}
}
}
}
OR using a bit of LINQ and List :p :
// Extension Method of array
public static void RemoveAllZeros(this long[] numbers)
{
int zeroPst = numbers.ToList().IndexOf(0);
if (zeroPst == -1)
return;
for (int i = zeroPst; i < numbers.Length - 1; i++)
{
numbers[i] = numbers[i + 1];
}
numbers.RemoveAllZeros(); //Recursion, carefull
}
//数组的扩展方法
公共静态void RemoveAllZeros(此长[]数组)//O(N^2)
{
for(int i=0;i
我同意,如果你事先不知道你会得到多少因子,那么列表会更好。但是如果你真的想使用数组,你可以循环遍历这个数组,逐个找到0,然后将它们留下数字。就像这样:
// Extension Method of array
public static void RemoveAllZeros(this long[] array) // O(N^2)
{
for (int i = 0; i < array.Length; i++)
{
if (array[i] == 0)
{
// Grab the index override value and continue swift left
for (int j = i; j < array.Length - 1; j++)
{
array[j] = array[j + 1];
}
}
}
}
OR using a bit of LINQ and List :p :
// Extension Method of array
public static void RemoveAllZeros(this long[] numbers)
{
int zeroPst = numbers.ToList().IndexOf(0);
if (zeroPst == -1)
return;
for (int i = zeroPst; i < numbers.Length - 1; i++)
{
numbers[i] = numbers[i + 1];
}
numbers.RemoveAllZeros(); //Recursion, carefull
}
//数组的扩展方法
公共静态void RemoveAllZeros(此长[]数组)//O(N^2)
{
for(int i=0;i
在每次循环迭代中递增i
,但并不总是为因子[i]赋值
。在不分配任何内容的循环中,它将保留其默认值0。尝试使用列表
而不是数组,只要。在找到新因子时向其添加
。在每次循环迭代中递增i
,但并不总是为因子[i]分配值
。在不分配任何内容的循环中,它将保留默认值0。尝试使用列表
而不是数组,只要使用。只要找到新的因子,就向其中添加。这是正确的。尽管有强烈的家庭作业氛围,但两者都应该是好的。编辑任何人以符合预期。使用列表而不是数组数组需要非常长的时间,我以前使用过列表,但它花了30分钟,甚至没有输出任何东西,所以使用数组会很好,我认为解决方案是在数组中设置元素,但它不是一个因子,但我不知道在else语句中写什么它不是!您的程序在e它很可能进入无限循环或其他什么。试着在调试器下运行它,看看发生了什么。我决定让代码在调试器打开的情况下运行,打印数组大约需要45分钟,虽然它在20分钟时找到了最大因子,但它必须循环,直到达到范围值,我想我必须选择将for循环或其他东西最小化是正确的。尽管有强烈的家庭作业氛围,但两者都应该是好的。编辑任何人以符合预期。使用列表而不是数组需要非常长的时间,我以前使用列表,但它花了30分钟,甚至没有输出任何内容,因此使用数组将是好的,我认为解决方案是当数组中的元素不是一个因子,但我不知道在else语句中写什么它不是!您的程序似乎也有一些其他错误,它很可能进入无限循环或其他什么。请尝试运行