我最近进入了C#,我试图了解一下Stacks。我想尝试对堆栈进行排序,首先将其转换为数组但我得到了一个奇怪的错误。
这是我的代码:
using System;
using System.Collections.Generic;
class Program
{
public static Stack<int> numbers = new Stack<int>();
static void Main(string[] args)
{
string[] input = Console.ReadLine().Split(' ');
int n = int.Parse(input[0]);
int s = int.Parse(input[1]);
int x = int.Parse(input[2]);
input = Console.ReadLine().Split(' ');
for (int i = 0; i < n; i++)
{
numbers.Push(int.Parse(input[i]));
}
for (int i = 0; i < s; i++)
{
numbers.Pop();
}
if (numbers.Count == 0)
Console.WriteLine(0);
else if (numbers.Contains(x))
Console.WriteLine("true");
else
Console.WriteLine(Array.Sort(numbers.ToArray()));
}
}
我的问题出在我的代码的最后一部分(最后一行):
参数1:无法从'void'转换为'bool'
我想知道为什么会发生这种情况,当Array.Sort()
需要一个数组作为参数时,我会传递number.ToArray()
,它应该从数字中返回一个新数组堆栈。
答案 0 :(得分:7)
出现错误的原因是 Array.Sort 返回 void ,而不是预期的数组。
另外,Console.WriteLine获取输入并将其打印到Console,不能获取数组并打印该数组,它只会打印出实际的数组地址。
为了打印数组(或任何集合),您应该使用string.Join来获取集合并返回由分隔符分隔的字符串。
非常简单numbers.OrderBy(num => num).ToArray();
示例:强>
public static void Main()
{
var numbers = new Stack<int>();
numbers.Push(4);
numbers.Push(1);
numbers.Push(2);
var numbersSorted = numbers.OrderBy(num => num).ToArray();
Console.WriteLine(string.Join(", ", numbersSorted));
}
输出: 1,2,4
答案 1 :(得分:2)
Array.Sort对数组执行就地排序。它不会返回新的排序数组。因此它是一个Void函数。
修改您的代码;
int[] numberArray = numbers.ToArray();
numberArray.Sort();
Console.WriteLine(numberArray);
答案 2 :(得分:2)
Array.Sort
是一个 void 方法,您需要将Sort
与写入(以控制台)分成两个不同的语句。
我建议使用OrderBy
linq扩展名和string.Join
一起显示一个内容。
Console.WriteLine(string.Join(",", numbers.OrderBy(x=>x));
答案 3 :(得分:1)
错误信息非常清楚。在这一行:
Console.WriteLine(Array.Sort(numbers.ToArray()));
Array.Sort
不会返回任何内容(无效),但您需要传递给需要参数的Console.WriteLine
。
您应该用以下内容替换最后一个:
var numbersArray = numbers.ToArray();
Array.Sort(numbersArray);
Console.WriteLine(string.Join(",", numbers));
答案 4 :(得分:1)
您需要在排序之前分配一个数组变量,然后您可以写入。
else
{
var array = numbers.ToArray();
Array.Sort(array);
Console.WriteLine(array);
}
答案 5 :(得分:1)
首先转换为Array
对象。然后对你的数组进行排序,然后你应该使用
Console.WriteLine(array)
打印您的数组。
int[] numberArray = numbers.ToArray(); //change to Array.
numberArray.sort(); // it will sort your Array.
Console.WriteLine(numberArray); //display the sorted Array.
而不是
Console.WriteLine(Array.Sort(numbers.ToArray())); // here whatever Sort() method return will be printed as Output but infact Sort() returns void.
所以编译时间得到Error: cannot convert from 'void' to 'bool'
答案 6 :(得分:0)
感谢大家的回复。我来自Java,你可以直接打印一个集合,这就是为什么我尝试这样做的原因。