除数查找功能的问题。预期为 <System.Int32[2]>
Posted
技术标签:
【中文标题】除数查找功能的问题。预期为 <System.Int32[2]>【英文标题】:Issue with divisors finding function. Expected is <System.Int32[2]> 【发布时间】:2018-07-28 17:19:48 【问题描述】:我对以下问题有疑问:
创建一个名为 divisors/Divisors 的函数,它接受一个整数并返回一个包含所有整数除数的数组(除了 1 和数字本身)。如果数字是素数,则返回字符串 '(integer) is prime'(在 C# 中为 null)(在 Haskell 和 Result 中使用 Either String a,在 Rust 中使用 String>)。
我的代码:
static int[] divisors(int a)
int[] array = new int[a];
int x = 0;
for( int i =2; i<a; i++)
if(a % i == 0)
array[x] = i;
x++;
if(array.Length == 0)
return null;
else
return array;
当我尝试运行它时,它会抛出:
"Expected is <System.Int32[2]>, actual is <System.Int32[15]>
Values differ at index [2]
Extra: < 0, 0, 0... >"
不知道如何处理这个。 非常感谢您的帮助。
解决办法:
using System.Collections.Generic;
public class Kata
public static int[] Divisors(int n)
List<int> numbers = new List<int>();
for (int i = 2; i < n; i++)
if (n % i == 0)
numbers.Add (i);
if (numbers.Count == 0)
return null;
else
int[] array = new int[numbers.Count];
array =numbers.ToArray();
return array;
【问题讨论】:
您的数组大小错误。使用List<int>
,添加符合条件的值,return yourList.ToArray()
一个简单的解决方案是将您的数组复制到一个大小合适的新数组中,然后再返回它
另外,请考虑一下:如果您要查找除数字本身之外的6
的所有除数,您为什么要检查5
?如果它是8
的除数,为什么还要检查7
。有一个数过去你再也找不到除数了,你能找出是哪一个吗?
谢谢!设法使用列表修复。
@InBetween 我猜你永远不会超过你正在寻找除数的数字的一半。
【参考方案1】:
您的代码没有出现该错误;但是,您的函数不会返回 null,因为您已将数组的长度确定为 a。所以长度永远不会为零。您得到所有这些零,因为值类型为您初始化。您的 int 数组用零填充。我认为这个练习应该向你证明,不同的集合类型更适合需要动态调整大小的数据,但如果你需要坚持使用数组,这里有一些代码。
static int[] divisors(int a)
int x = 0;
int[] array = new int[x];
for (int i = 2; i < a; i++)
if (a % i == 0)
x++;
Array.Resize<int>(ref array, x);
array[x-1] = i;
if (array.Length == 0)
return null;
else
return array;
private void button1_Click(object sender, EventArgs e)
int b = Int32.Parse(textBox1.Text);
int[] a = divisors(b);
if (a == null)
MessageBox.Show($"b is a prime number.");
else
foreach (int x in a)
Debug.Print(x.ToString());
【讨论】:
以上是关于除数查找功能的问题。预期为 <System.Int32[2]>的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode二分查找1283.使结果不超过阈值的最小除数&875.爱吃香蕉的珂珂
在EXCEL中啥情况下会出现#num!,#name,#,#ref!等错误信息报告
XML 反序列化 System.InvalidOperationException” <Objects xmlns=''> 不是预期的