似乎除了垃圾价值什么都得不到
cant seem to get anything but garbage value
代码以 csv("23,25,27) 的形式获取 sting 中的输入,然后找到它们的最高值 27(类型 int)全部。但是 q 似乎 return 垃圾值每次。
static void Main(string[] args)
{
var p=0;`enter code here`
int q=0,r,s=0;
Console.WriteLine("Enter the numbers seperated by comma");
var input = Console.ReadLine();
for (var i = 0; i < input.Length; i++)
{
if (input[i] == ',')
{
p = 0;
s = (s > q) ? s : q;
}
//else if (input[i] == ' ')
//{
// p = 0;
// continue;
//}
else
{
q = (p == 1) ? q * 10 + Convert.ToInt32(input[i]) : Convert.ToInt32(input[i]);
Console.WriteLine(q);
p = 1;
}
}
Console.WriteLine(s);
}
输出:
输入以逗号分隔的数字
23,27
50
551
50
555
551
你的问题是在执行循环时。您需要在执行 for 循环之前拆分输入。
// Perform split of the input using ',' as delimiter
var splitstring = input.Split(',');
// iniate max value
var maxval = 0;
// perform foreach loop (similar to for loop but easier to read especially when want to read all the content in an array)
foreach (var x in splitstring)
{
var y = int.Parse(x);
if (y > maxval) maxval = y;
}
// Print the final maxval
Console.WriteLine(maxval);
可能有语法错误,但逻辑应该在那里。
与其使用 p
、q
、s
,不如将这些变量分别重命名为 hasSeenAtLeastOneDigit
、parsed
和 currentHighest
,这是更具描述性的名称。另请注意,hasSeenAtLeastOneDigit
应该是 bool
,并且 r
未在任何地方使用。
var hasSeenAtLeastOneDigit = false;
int parsed=0,currentHighest = 0;
Console.WriteLine("Enter the numbers seperated by comma");
var input = Console.ReadLine();
for (var i = 0; i < input.Length; i++)
{
if (input[i] == ',')
{
hasSeenAtLeastOneDigit = false;
currentHighest = (currentHighest > parsed) ? currentHighest : parsed;
}
else
{
parsed = hasSeenAtLeastOneDigit ? parsed * 10 + Convert.ToInt32(input[i]) : Convert.ToInt32(input[i]);
// Console.WriteLine(parsed);
hasSeenAtLeastOneDigit = true;
}
}
Console.WriteLine(currentHighest);
你这里有 2 个错误。首先,为了安全起见,你不小心用了this overload of ToInt32
that takes a char
, which converts a char
to its UTF-16 code unit value, not the digit that it represents. You should have used the overload that takes a string
or int.TryParse
Convert.ToInt32(input[i].ToString())
// ^^^^^^^^^^^
// converts to string, so the string overload is used
第二个错误是您没有将最后解析的值与 currentHighest
进行比较。考虑输入为 1,2,3,4
的情况。循环结束后,parsed
将变为 4
,而 currentHighest
将变为 3
,这是不正确的。发生这种情况是因为 运行 这一行的末尾没有尾随逗号:
currentHighest = (currentHighest > parsed) ? currentHighest : parsed;
您只需在循环末尾复制并粘贴该行即可解决此问题。
var hasSeenAtLeastOneDigit=false;
int parsed=0,currentHighest=0;
Console.WriteLine("Enter the numbers seperated by comma");
var input = Console.ReadLine();
for (var i = 0; i < input.Length; i++)
{
if (input[i] == ',')
{
hasSeenAtLeastOneDigit = false;
currentHighest = (currentHighest > parsed) ? currentHighest : parsed;
}
else
{
parsed = hasSeenAtLeastOneDigit ? parsed * 10 + Convert.ToInt32(input[i].ToString()) : Convert.ToInt32(input[i].ToString());
hasSeenAtLeastOneDigit = true;
}
}
currentHighest = (currentHighest > parsed) ? currentHighest : parsed;
Console.WriteLine(currentHighest);
另请注意,整个算法可以像这样使用 LINQ 完成:
var input = Console.ReadLine();
var highest = input.Split(',').Select(int.Parse).Max();
Console.WriteLine(highest);
代码以 csv("23,25,27) 的形式获取 sting 中的输入,然后找到它们的最高值 27(类型 int)全部。但是 q 似乎 return 垃圾值每次。
static void Main(string[] args)
{
var p=0;`enter code here`
int q=0,r,s=0;
Console.WriteLine("Enter the numbers seperated by comma");
var input = Console.ReadLine();
for (var i = 0; i < input.Length; i++)
{
if (input[i] == ',')
{
p = 0;
s = (s > q) ? s : q;
}
//else if (input[i] == ' ')
//{
// p = 0;
// continue;
//}
else
{
q = (p == 1) ? q * 10 + Convert.ToInt32(input[i]) : Convert.ToInt32(input[i]);
Console.WriteLine(q);
p = 1;
}
}
Console.WriteLine(s);
}
输出: 输入以逗号分隔的数字 23,27 50 551 50 555 551
你的问题是在执行循环时。您需要在执行 for 循环之前拆分输入。
// Perform split of the input using ',' as delimiter
var splitstring = input.Split(',');
// iniate max value
var maxval = 0;
// perform foreach loop (similar to for loop but easier to read especially when want to read all the content in an array)
foreach (var x in splitstring)
{
var y = int.Parse(x);
if (y > maxval) maxval = y;
}
// Print the final maxval
Console.WriteLine(maxval);
可能有语法错误,但逻辑应该在那里。
与其使用 p
、q
、s
,不如将这些变量分别重命名为 hasSeenAtLeastOneDigit
、parsed
和 currentHighest
,这是更具描述性的名称。另请注意,hasSeenAtLeastOneDigit
应该是 bool
,并且 r
未在任何地方使用。
var hasSeenAtLeastOneDigit = false;
int parsed=0,currentHighest = 0;
Console.WriteLine("Enter the numbers seperated by comma");
var input = Console.ReadLine();
for (var i = 0; i < input.Length; i++)
{
if (input[i] == ',')
{
hasSeenAtLeastOneDigit = false;
currentHighest = (currentHighest > parsed) ? currentHighest : parsed;
}
else
{
parsed = hasSeenAtLeastOneDigit ? parsed * 10 + Convert.ToInt32(input[i]) : Convert.ToInt32(input[i]);
// Console.WriteLine(parsed);
hasSeenAtLeastOneDigit = true;
}
}
Console.WriteLine(currentHighest);
你这里有 2 个错误。首先,为了安全起见,你不小心用了this overload of ToInt32
that takes a char
, which converts a char
to its UTF-16 code unit value, not the digit that it represents. You should have used the overload that takes a string
or int.TryParse
Convert.ToInt32(input[i].ToString())
// ^^^^^^^^^^^
// converts to string, so the string overload is used
第二个错误是您没有将最后解析的值与 currentHighest
进行比较。考虑输入为 1,2,3,4
的情况。循环结束后,parsed
将变为 4
,而 currentHighest
将变为 3
,这是不正确的。发生这种情况是因为 运行 这一行的末尾没有尾随逗号:
currentHighest = (currentHighest > parsed) ? currentHighest : parsed;
您只需在循环末尾复制并粘贴该行即可解决此问题。
var hasSeenAtLeastOneDigit=false;
int parsed=0,currentHighest=0;
Console.WriteLine("Enter the numbers seperated by comma");
var input = Console.ReadLine();
for (var i = 0; i < input.Length; i++)
{
if (input[i] == ',')
{
hasSeenAtLeastOneDigit = false;
currentHighest = (currentHighest > parsed) ? currentHighest : parsed;
}
else
{
parsed = hasSeenAtLeastOneDigit ? parsed * 10 + Convert.ToInt32(input[i].ToString()) : Convert.ToInt32(input[i].ToString());
hasSeenAtLeastOneDigit = true;
}
}
currentHighest = (currentHighest > parsed) ? currentHighest : parsed;
Console.WriteLine(currentHighest);
另请注意,整个算法可以像这样使用 LINQ 完成:
var input = Console.ReadLine();
var highest = input.Split(',').Select(int.Parse).Max();
Console.WriteLine(highest);