输入输入后输出控制台冻结
Output Console freeze after entering the input
我一直在尝试编写代码来查找给定数组元素的 LCM。我的代码看起来像这样
public long LcmOfArray(List<int> a)
{
long LCM = 1;
bool divisible = false;
int divisor = 2, count = 0;
while (count != a.Count)
{
for (int i = 0; i < a.Count; i++)
{
if (a[i] == 0)
{
return 0;
}
if (a[i] < 0)
{
a[i] *= -1;
}
if (a[i] % divisor == 0)
{
divisible = true;
a[i] /= divisor;
}
if (a[i] == 1)
{
count++;
}
}
if (divisible)
{
LCM *= divisor;
}
else
{
divisor++;
}
}
return LCM;
}
我的问题是当我输入时输出控制台冻结。我尝试了另一种没有 while 循环的方法。也就是去掉了while循环,最后加了一个if循环。
if (count == a.Count)
{
return LCM;
}
但现在编译器抛出一个错误,指出并非所有代码路径 returns 一个值。有人可以帮我解决我的代码中的错误吗?我是编码的初学者。提前致谢!!
while 循环将 运行 不断,直到你给它一些东西来打破循环。在您的情况下,它打破循环的唯一方法似乎是在列表的每个项目都是 1 或达到 0 的情况下,因此根据列表,它可能会或可能不会卡在无限循环。例如,a[i] = 2 似乎创建了一个无限循环。
另一个编译器错误是因为某些条件可能会跳过 return 语句。
if(count==a.Count)
{
return LCM;
}
return void; // because what if count does not equal a.Count?
您应该将 bool divisible = false;
和 int count = 0;
放在 while 循环中。由于不能将 int count = 0;
置于 while 循环之外,因此应使用 while (true)
而不是 while (count != a.Count)
并将以下 if 语句放在 while 循环的最后。
if (count == a.Count)
{
return LCM;
}
这里是完整的方法:
public static long LcmOfArray(List<int> a)
{
long LCM = 1;
int divisor = 2;
while (true)
{
int count = 0;
bool divisible = false;
for (int i = 0; i < a.Count; i++)
{
if (a[i] == 0)
{
return 0;
}
if (a[i] < 0)
{
a[i] *= -1;
}
if (a[i] == 1)
{
count++;
}
if (a[i] % divisor == 0)
{
divisible = true;
a[i] /= divisor;
}
}
if (divisible)
{
LCM *= divisor;
}
else
{
divisor++;
}
if (count == a.Count)
{
return LCM;
}
}
}
我一直在尝试编写代码来查找给定数组元素的 LCM。我的代码看起来像这样
public long LcmOfArray(List<int> a) { long LCM = 1; bool divisible = false; int divisor = 2, count = 0; while (count != a.Count) { for (int i = 0; i < a.Count; i++) { if (a[i] == 0) { return 0; } if (a[i] < 0) { a[i] *= -1; } if (a[i] % divisor == 0) { divisible = true; a[i] /= divisor; } if (a[i] == 1) { count++; } } if (divisible) { LCM *= divisor; } else { divisor++; } } return LCM; }
我的问题是当我输入时输出控制台冻结。我尝试了另一种没有 while 循环的方法。也就是去掉了while循环,最后加了一个if循环。
if (count == a.Count) { return LCM; }
但现在编译器抛出一个错误,指出并非所有代码路径 returns 一个值。有人可以帮我解决我的代码中的错误吗?我是编码的初学者。提前致谢!!
while 循环将 运行 不断,直到你给它一些东西来打破循环。在您的情况下,它打破循环的唯一方法似乎是在列表的每个项目都是 1 或达到 0 的情况下,因此根据列表,它可能会或可能不会卡在无限循环。例如,a[i] = 2 似乎创建了一个无限循环。 另一个编译器错误是因为某些条件可能会跳过 return 语句。
if(count==a.Count)
{
return LCM;
}
return void; // because what if count does not equal a.Count?
您应该将 bool divisible = false;
和 int count = 0;
放在 while 循环中。由于不能将 int count = 0;
置于 while 循环之外,因此应使用 while (true)
而不是 while (count != a.Count)
并将以下 if 语句放在 while 循环的最后。
if (count == a.Count)
{
return LCM;
}
这里是完整的方法:
public static long LcmOfArray(List<int> a)
{
long LCM = 1;
int divisor = 2;
while (true)
{
int count = 0;
bool divisible = false;
for (int i = 0; i < a.Count; i++)
{
if (a[i] == 0)
{
return 0;
}
if (a[i] < 0)
{
a[i] *= -1;
}
if (a[i] == 1)
{
count++;
}
if (a[i] % divisor == 0)
{
divisible = true;
a[i] /= divisor;
}
}
if (divisible)
{
LCM *= divisor;
}
else
{
divisor++;
}
if (count == a.Count)
{
return LCM;
}
}
}