[英]cant seem to get anything but garbage value
代碼以 csv("23,25,27) 的形式獲取 sting 中的輸入,然后找到它們的最高值 27(類型 int)。但是 q 似乎每次都返回垃圾值。
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);
}
OUTPUT:輸入以逗號分隔的數字 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個錯誤。 首先,您不小心使用了采用 char 的ToInt32
重載,它將char
char
為它的 UTF-16 代碼單元值,而不是它表示的數字。 如果你想更安全,你應該使用帶string
或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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.