为什么如果我在方法中输入一个负数,条件 else if 不捕获它
why if I enter a negative number in the method, condition else if does not catch it
我对这个例子的解决方案有疑问。
Input:>6
Output:0+1+2+3+4+5+6 = 21
Input:> -15
Output:-15<0
Input:>0
Output:0=0
public static string ShowSequence(int n)
{
int sumInt = 0;
string sum = "";
for (int i = 0; i <= n; i++)
{
if (n == 0)
{
sum += i + "=";
}
else if (n < 0)
{
sum += n + "<";
}
else
if (i == n)
{
sum += i + " = ";
}
else
sum += i + "+";
sumInt += i;
}
sum += sumInt;
return sum;
}
除负数外一切正常,因为我的程序 return 0 而不是 -15<0。感谢您的帮助!
你在循环中检查你的输入,这就是它出错的地方。
我修改了您的代码,将检查从 for 循环中拉出,并提前返回以避免混淆。
https://dotnetfiddle.net/gLmo62
public static string ShowSequence(int n)
{
if (n == 0)
{
return n + "=";
}
if (n < 0)
{
return n + "<";
}
int sumInt = 0;
string sum = "";
for (int i = 0; i <= n; i++)
{
if (i == n)
{
sum += i + " = ";
}
else
{
sum += i + "+";
}
sumInt += i;
}
sum += sumInt;
return sum;
}
当数字为负时,您的循环条件 i <= n;
在第一次迭代开始前失败。因此,执行永远不会达到 if/else 条件。
您可以在进入循环之前用条件检查重写该方法。
public static string ShowSequence(int n)
{
if (n == 0)
{
return n + "=";
}
if (n < 0)
{
return n + "<";
}
int sumInt = 0;
StringBuilder sum = new StringBuilder();
for (int i = 0; i <= n; i++)
{
sum.Append($"{i}{(i==n?" = ":"+")}");
sumInt += i;
}
sum.Append(sumInt);
return sum.ToString();
}
请注意,我还使用了 StringBuilder
,而不是字符串。字符串 class 是不可变的,这意味着每次您 append/modify 一个 string
,您实际上是在内存中创建一个新的 string
对象。在这种情况下,string
被重复修改,您应该避免为每次修改创建 string
的开销。为此,您可以使用 StringBuilder
class.
作为附加说明,您可以通过使用 Linq 进一步减少代码。例如,
public static string ShowSequence(int n)
{
if (n == 0)
{
return n + "=";
}
if (n < 0)
{
return n + "<";
}
var strBuilder = new StringBuilder();
strBuilder.Append(Enumerable.Range(0, n+1)
.Select(x => x.ToString())
.Aggregate((a, b) => a + "+" + b));
strBuilder.Append($" = {(n*(n+1))/2}");
return strBuilder.ToString();
}
您可以简单地说明特殊情况:n == 0
, `n < 0.
然后使用Enumerable.Range生成从0到n的所有数字。
和 String.Join,没有 "Is that the last elements? Do I need one more + ?".
并 Enumerable.Sum 计算总和。
你最终会得到一个非常简单的代码。
public static string ShowSequence(int n)
{
if (n == 0)
{
return n + " = 0";
}
if (n < 0)
{
return n + " < 0";
}
// generate all numbers from 0 to n. Takes n+1 steps.
var enumeration = Enumerable.Range(0, n+1);
var plusOperatorConcatenation = String.Join(" + ", enumeration ) ;
return plusOperatorConcatenation + " = " + enumeration.Sum();
}
我对这个例子的解决方案有疑问。
Input:>6
Output:0+1+2+3+4+5+6 = 21
Input:> -15
Output:-15<0
Input:>0
Output:0=0
public static string ShowSequence(int n)
{
int sumInt = 0;
string sum = "";
for (int i = 0; i <= n; i++)
{
if (n == 0)
{
sum += i + "=";
}
else if (n < 0)
{
sum += n + "<";
}
else
if (i == n)
{
sum += i + " = ";
}
else
sum += i + "+";
sumInt += i;
}
sum += sumInt;
return sum;
}
除负数外一切正常,因为我的程序 return 0 而不是 -15<0。感谢您的帮助!
你在循环中检查你的输入,这就是它出错的地方。 我修改了您的代码,将检查从 for 循环中拉出,并提前返回以避免混淆。
https://dotnetfiddle.net/gLmo62
public static string ShowSequence(int n)
{
if (n == 0)
{
return n + "=";
}
if (n < 0)
{
return n + "<";
}
int sumInt = 0;
string sum = "";
for (int i = 0; i <= n; i++)
{
if (i == n)
{
sum += i + " = ";
}
else
{
sum += i + "+";
}
sumInt += i;
}
sum += sumInt;
return sum;
}
当数字为负时,您的循环条件 i <= n;
在第一次迭代开始前失败。因此,执行永远不会达到 if/else 条件。
您可以在进入循环之前用条件检查重写该方法。
public static string ShowSequence(int n)
{
if (n == 0)
{
return n + "=";
}
if (n < 0)
{
return n + "<";
}
int sumInt = 0;
StringBuilder sum = new StringBuilder();
for (int i = 0; i <= n; i++)
{
sum.Append($"{i}{(i==n?" = ":"+")}");
sumInt += i;
}
sum.Append(sumInt);
return sum.ToString();
}
请注意,我还使用了 StringBuilder
,而不是字符串。字符串 class 是不可变的,这意味着每次您 append/modify 一个 string
,您实际上是在内存中创建一个新的 string
对象。在这种情况下,string
被重复修改,您应该避免为每次修改创建 string
的开销。为此,您可以使用 StringBuilder
class.
作为附加说明,您可以通过使用 Linq 进一步减少代码。例如,
public static string ShowSequence(int n)
{
if (n == 0)
{
return n + "=";
}
if (n < 0)
{
return n + "<";
}
var strBuilder = new StringBuilder();
strBuilder.Append(Enumerable.Range(0, n+1)
.Select(x => x.ToString())
.Aggregate((a, b) => a + "+" + b));
strBuilder.Append($" = {(n*(n+1))/2}");
return strBuilder.ToString();
}
您可以简单地说明特殊情况:n == 0
, `n < 0.
然后使用Enumerable.Range生成从0到n的所有数字。
和 String.Join,没有 "Is that the last elements? Do I need one more + ?".
并 Enumerable.Sum 计算总和。
你最终会得到一个非常简单的代码。
public static string ShowSequence(int n)
{
if (n == 0)
{
return n + " = 0";
}
if (n < 0)
{
return n + " < 0";
}
// generate all numbers from 0 to n. Takes n+1 steps.
var enumeration = Enumerable.Range(0, n+1);
var plusOperatorConcatenation = String.Join(" + ", enumeration ) ;
return plusOperatorConcatenation + " = " + enumeration.Sum();
}