C# - 按降序打印数组时出现问题

时间:2017-06-22 16:36:17

标签: c# sorting

我接受来自用户的号码<html> <html lang="en"> <head> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script type="text/javascript" src="http://bioportal.bioontology.org/javascripts/widgets/form_complete.js"></script> <meta charset="utf-8"> <title> NCBO Widget tester </title> </head> <body> <body style="background-color:3a64a8"> <h1> NCBO Widget Tester </h1> <p>Term Selection in a field</p> <form action="/action_page.php"> Term tagger:<br> <input type="text" name="term" class="bp_form_complete-all-name" size="100"/><br><br> <input type="submit" value="Submit"> </form> </body> </html> ,其长度为originally_entered_number_inString位数。现在,如果该数字为正数,则按升序打印该数字。如果是负数,则下降。我得到了积极的一面,但负面的部分是我被困住的地方 - 它以降序显示负数,但旁边有一个 -1

示例:用户输入n。因此该数字中有6位数字且为正数,因此提升 - 结果:654568。但是,如果我输入455668,则输出-584669如果您看到,结果有效,只是它将连字符的值( - (减号))设为{{1} }, 或者其他的东西。你能帮帮我吗?

以下是代码:

986654-1

此外,它将减号计为数字。

提前致谢。

3 个答案:

答案 0 :(得分:1)

嗯,这对你有用吗?

string value = Console.ReadLine();
var negative = value.StartsWith("-");

var newValue = value.Replace("-", string.Empty);
var numbers = newValue
    .Select(c => (int)char.GetNumericValue(c))
    .ToArray();

Array.Sort(numbers);

if (negative) Array.Reverse(numbers);

foreach (var item in numbers){ 
    Console.Write(item);
}

答案 1 :(得分:1)

负数不仅仅是一个“包含减号”的数字(12.0E-1是正数),但它是一个小于0的数字。我建议你想出一个更直接的逻辑你的算法。

一个可能是这样的:首先将输入字符串复制到整数变量

int intNumber = int.Parse(inputNumber);

检查输入数字是否为负数

bool isNegative = (intNumber < 0);

然后取其绝对值(这只是没有符号的数字)

int absNumber = Math.Abs(intNumber);

并将数字放入整数数组

int[] intArray = absNumber.ToString().Select(digit=>int.Parse(digit.ToString())).ToArray();

现在你可以轻松排序:

int[] sortedArray = Array.Sort(intArray);
if (isNegative)
    sortedArray = Array.Reverse(sortedArray);

答案 2 :(得分:0)

如果它小于0,则为entered_number_inInt,因此您不会将'-'解析为-1

(int)char.GetNumericValue('-') == -1

其他解决方案是使用'-'替换字符串中的''