C#局部变量won';if语句中的t变异
我对C#相当陌生,我已经用谷歌搜索了答案。我找到的最接近的答案是这个。但这对我没有帮助 我正在尝试编写一个函数,只使用循环和拼接来查找字符串中的最大数字。出于某种原因,当满足条件时,局部变量big不会在if语句中发生变异。我曾经尝试过在遇到空格时设置big=34来调试它,但即使这样,它也不会改变局部变量C#局部变量won';if语句中的t变异,c#,C#,我对C#相当陌生,我已经用谷歌搜索了答案。我找到的最接近的答案是这个。但这对我没有帮助 我正在尝试编写一个函数,只使用循环和拼接来查找字符串中的最大数字。出于某种原因,当满足条件时,局部变量big不会在if语句中发生变异。我曾经尝试过在遇到空格时设置big=34来调试它,但即使这样,它也不会改变局部变量 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syste
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace parser
{
class Sub_parser
{
// function to find the greatest number in a string
public int Greatest(string uinput)
{
int len = uinput.Length;
string con1 = "";
int big = 0;
int m = 0;
// looping through the string
for (int i = 0; i < len; i++)
{
// find all the numbers
if (char.IsDigit(uinput[i]))
{
con1 = con1 + uinput[i];
}
// if we hit a space then we check the number value
else if (uinput[i].Equals(" "))
{
if (con1 != "")
{
m = int.Parse(con1);
Console.WriteLine(m);
if (m > big)
{
big = m;
}
}
con1 = "";
}
}
return big;
}
public static void Main(string[] args)
{
while (true)
{
string u_input = Console.ReadLine();
Sub_parser sp = new Sub_parser();
Console.WriteLine(sp.Greatest(u_input));
}
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
名称空间分析器
{
类子语法分析器
{
//函数查找字符串中的最大数
公共整数最大(字符串输入)
{
int len=输入长度;
字符串con1=“”;
int大=0;
int m=0;
//在字符串中循环
对于(int i=0;i大)
{
大=m;
}
}
con1=“”;
}
}
回归大;
}
公共静态void Main(字符串[]args)
{
while(true)
{
字符串u_input=Console.ReadLine();
Sub_parser sp=新的Sub_parser();
控制台写入线(sp.max(u_输入));
}
}
}
}
问题来自您在本声明中的检查:
else if (uinput[i].Equals(" "))
uinput[i]是字符,而“”是字符串:
如果用单引号替换双引号
并且,如注释所述,最后一个数字永远不会被检查,除非输入字符串以空格结尾。这给您留下了两个选择:
- 再次检查循环后con1的值(不太好看)
- 重写你的方法,因为你做得有点过火,不要重新发明轮子。您可以执行以下操作(使用System.Linq): 只有当你确信你的意见时
uinput=“34”
。
在循环内部,仅当uinput[i].等于(“”
)时,才检查m>是否大。这从来都不是。
一般来说,如果你读一行,数字后面跟空格,它会忽略最后一个数字
一种解决方案是在uinput中附加一个“”,但我建议使用拼接
string[] numbers = uinput.Split(null);
然后迭代数组
另外,正如在另一个答案中所说,compareuinput[i].Equals(“”)
,因为“
表示一个字符串,而您正在将一个字符与一个字符串进行比较。正如Martin Verjans所提到的,为了使代码正常工作,您必须像在他的示例中那样对其进行编辑。
虽然如果您输入一个数字仍然存在问题。然后,输出将为0
我会选择这种方法:
public static int Greatest(string uinput)
{
List<int> numbers = new List<int>();
foreach(string str in uinput.Split(' '))
{
numbers.Add(int.Parse(str));
}
return numbers.Max();
}
公共静态整数最大值(字符串输入)
{
列表编号=新列表();
foreach(uinput.Split(“”)中的字符串str)
{
添加(int.Parse(str));
}
返回数字。Max();
}
输入看起来如何?设置断点并使用调试器逐步检查代码和变量。变量在if()
语句中会发生变异。问题是您将所有数字追加到同一个字符串中,因此对于输入12
,2
将与12
进行比较,因此不会变大。局部变量没有问题。如果你认为它们的值没有改变,那就意味着代码中有一个bug。但是,您没有解释您所谈论的变量。你试过调试你的代码吗?也许条件是错误的,执行从未进入修改该变量的块?@PanagiotisKanavos OP说,big
变量是一个没有改变的变量。“我试图通过设置big=34来调试它”-这不是真正的调试,主要是猜测和假设。调试将涉及设置一个断点,然后一次一个操作地逐步完成功能,并观察运行时值和行为。在程序执行过程中的某个时刻,特定操作将出现意外结果。调试时发生的第一件意外事情是什么?该操作的输入是什么?结果如何?预期的结果是什么?为什么?我知道最后一个号码不会被检查。这只是一项正在进行的工作。我一直在测试输入“我有32只羊”谢谢。我不敢相信答案竟如此简单!我知道您可以使用split方法来实现这一点,我曾试图通过故意使用循环来学习语法。@jun下次,请不要忘记提及您正在尝试的输入字符串示例。你的问题可能会被社区关闭。
string[] numbers = uinput.Split(null);
public static int Greatest(string uinput)
{
List<int> numbers = new List<int>();
foreach(string str in uinput.Split(' '))
{
numbers.Add(int.Parse(str));
}
return numbers.Max();
}