Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将值重新指定给无法工作的字符数组_C#_Arrays - Fatal编程技术网

C# 将值重新指定给无法工作的字符数组

C# 将值重新指定给无法工作的字符数组,c#,arrays,C#,Arrays,我当前在将值重新分配给字符数组时遇到问题。下面是我的代码(找到下一个最小回文的未完成解决方案): 这将返回1001,然后返回101,然后在返回Int32.Parse(result.ToString())时给出formatexception;声明 我很困惑,因为我认为在分配result[high]=(char)replacedvalue1;之后,“result”应该是1101;。打印replacedvalue1时,我得到了预期的“1”。然而,逐行调试显示“1001”最后变成“11”,表示奇怪的字符

我当前在将值重新分配给字符数组时遇到问题。下面是我的代码(找到下一个最小回文的未完成解决方案):

这将返回1001,然后返回101,然后在返回Int32.Parse(result.ToString())时给出formatexception;声明

我很困惑,因为我认为在分配result[high]=(char)replacedvalue1;之后,“result”应该是1101;。打印replacedvalue1时,我得到了预期的“1”。然而,逐行调试显示“1001”最后变成“11”,表示奇怪的字符

出了什么问题


谢谢,字符和数字不是一回事。我发现做这类事情时最容易保持开放的心态。 如果您查看其中一个图表,您将看到字符0实际上具有48的十进制值

char c = (char)48; // Equals the character '0'
反之亦然:

char c = '0';
int i = (int)c; // Equals the number 48
您设法使
char
s和
int
s在大多数情况下保持分离,但最终您将它们混淆了:

// Char.GetNumericValue('0') will return the number 0
// so now replacedvalue1 will equal 1
int replacedvalue1 = (int)Char.GetNumericValue(numberString[high]) + 1;
// You are casting the number 1 to a character, which according to the
// ASCII chart is the (unprintable) character SOH (start of heading)
result[high] = (char)replacedvalue1;
仅供参考,为了对其执行操作,实际上不需要来回转换字符<代码>字符c='a';C++;<代码>有效,将等于表中的下一个字符('b')。类似地,您可以增加数字字符:
charc='0';C++;c现在等于“1”

编辑:将整数1转换为字符“1”的最简单方法是将整数“添加”到字符“0”中:

result[high] = (char)('0' + replacedvalue1);

当然,有很多更简单的方法来完成您想要做的事情,但是这些技术(转换和添加
char
s和
int
s)是很好的工具。我发现做这类事情时最容易保持开放的心态。 如果您查看其中一个图表,您将看到字符0实际上具有48的十进制值

char c = (char)48; // Equals the character '0'
反之亦然:

char c = '0';
int i = (int)c; // Equals the number 48
您设法使
char
s和
int
s在大多数情况下保持分离,但最终您将它们混淆了:

// Char.GetNumericValue('0') will return the number 0
// so now replacedvalue1 will equal 1
int replacedvalue1 = (int)Char.GetNumericValue(numberString[high]) + 1;
// You are casting the number 1 to a character, which according to the
// ASCII chart is the (unprintable) character SOH (start of heading)
result[high] = (char)replacedvalue1;
仅供参考,为了对其执行操作,实际上不需要来回转换字符<代码>字符c='a';C++;<代码>有效,将等于表中的下一个字符('b')。类似地,您可以增加数字字符:
charc='0';C++;c现在等于“1”

编辑:将整数1转换为字符“1”的最简单方法是将整数“添加”到字符“0”中:

result[high] = (char)('0' + replacedvalue1);

当然,有很多更简单的方法来完成您想要做的事情,但是这些技术(转换和添加
char
s和
int
s)是很好的工具

这是您的IsPalindrome方法

private static bool IsPalindrome(int n)
{
    string ns = n.ToString(CultureInfo.InvariantCulture);
    var reversed = string.Join("", ns.Reverse());
    return (ns == reversed);
}

private static int FindTheNextSmallestPalindrome(int x)
{
   for (int i = x; i < 2147483647; i++)
   {
       if (IsPalindrome(i))
       {
           return i;
       }
   }
   throw new Exception("Number must be less than 2147483647");
}

您不必编写那么多代码来完成它

这是您的IsPalindrome方法

private static bool IsPalindrome(int n)
{
    string ns = n.ToString(CultureInfo.InvariantCulture);
    var reversed = string.Join("", ns.Reverse());
    return (ns == reversed);
}

private static int FindTheNextSmallestPalindrome(int x)
{
   for (int i = x; i < 2147483647; i++)
   {
       if (IsPalindrome(i))
       {
           return i;
       }
   }
   throw new Exception("Number must be less than 2147483647");
}


最好使用调试器解决此问题。请调试一下。我不懂你的算法。你能描述一下吗?什么是高,什么是低?你为什么要更换一些东西?你期望什么样的产出?展示一些例子。到目前为止,我的算法检查第一种情况,如果一个字符串都是9;在这种情况下,下一个最高回文是1x1,其中x=相应的0数。第二种情况是字符串已经是回文;为了找到下一个最高的回文数,我将第一个不是9的数字的索引设为高和低;例如191年或1991年。我把所有的9都改为0,我想在高索引和低索引的下一个数字上加1。例如,这将从191变为202,或从1991变为2002。在我的测试中,1001应该改为1111,其中索引:1和2。在上面的描述中,我总是试图找到下一个最小的回文数,而不是下一个最高的回文数。例如,101之后的下一个最小回文是111。这最好使用调试器来解决。请调试一下。我不懂你的算法。你能描述一下吗?什么是高,什么是低?你为什么要更换一些东西?你期望什么样的产出?展示一些例子。到目前为止,我的算法检查第一种情况,如果一个字符串都是9;在这种情况下,下一个最高回文是1x1,其中x=相应的0数。第二种情况是字符串已经是回文;为了找到下一个最高的回文数,我将第一个不是9的数字的索引设为高和低;例如191年或1991年。我把所有的9都改为0,我想在高索引和低索引的下一个数字上加1。例如,这将从191变为202,或从1991变为2002。在我的测试中,1001应该改为1111,其中索引:1和2。在上面的描述中,我总是试图找到下一个最小的回文数,而不是下一个最高的回文数。例如,101之后的下一个最小回文是111。这可能是另一个问题的一个很好的解决方案,但是OP的方法有这样一个特征:
int-nextsmallestalindrome(int-number)
@Enigmativity:那么你的意思是说OP试图调用一个方法而不知道要使用什么数字吗?不,他的密码签名和你的不一样。你的代码没有做OP的代码试图做的事情。你没有回答他的问题,你编写了类似的代码,但没有做同样的事情。@Enigmativity。好吧,我认为这是一个积极的评价。答案改变。这可能是另一个问题的一个很好的解决方案,但OP的方法有以下特征:
int-nextsmallestalindrome(int-number)
@Enigmativity:那么你的意思是说OP试图调用一个方法而不知道要使用什么数字吗?不,他的代码的特征与你的不同。你的代码没有做OP的代码试图做的事情。你没有回答他的问题,你编写了类似的代码,但没有做同样的事情。@Enigmativity。好吧,我认为这是一个积极的评价。答案变了。嗯,我很害怕;这完全有道理。谢谢我已经更新了