int n;
Console.WriteLine("Please enter a positive integer for the array size"); // asking the user for the int n
n = Int32.Parse(Console.ReadLine());
int[] array = new int[n]; // declaring the array
int[] newarray = new int[n];
Random rand = new Random();
for (int i = 0; i < array.Length; i++)
{
array[i] = i + 1;
}
for (int y = 0; y < newarray.Length; y++)
{
int caseSwitch = 1;
switch (caseSwitch)
{
case 1:
newarray[y] = array[rand.Next(n)];
goto case 2;
case 2:
for (int z = y+1; z > 0; z--)
{
if (newarray[y] == newarray[z-1])
goto case 1;
}
break;
}
}
for (int x=0;x<newarray.Length;x++)
{
Console.Write(" {0}", newarray[x]);
}
Console.ReadLine();
这是我开始使用的代码,但它没有显示任何值,是不是填充了数组?我是新手,所以任何帮助都会非常感激
答案 0 :(得分:1)
我认为你的方法非常复杂。你应该退后一步,想想你想要完成什么,先做好计划,然后开始编程。
您要做的是使用随机排序顺序对数组进行排序。
创建一个随机返回比较的新IComparer
:
public class RandomComparer<T> : IComparer<T> {
private static Random random = new Random();
public int Compare(T a, T b) {
return random.Next(2) == 0 ? 1 : -1;
}
}
现在,对你的数组进行排序:
int[] array = {
1, 2, 3, 4, 5,
6, 7, 8, 9, 10
};
Array.Sort<int>(array, new RandomComparer<int>());
for (int i = 0; i < array.Length; i++)
Console.WriteLine(array[i]);
真的那么简单。请参阅IDEOne.com
上的演示答案 1 :(得分:0)
你可以这样做:
...
n = Int32.Parse(Console.ReadLine());
// Initial array filled with 1..n values
int[] data = Enumerable.Range(1, n).ToArray();
// data array indice to show, initially 0..n-1
List<int> indice = Enumerable.Range(0, n - 1).ToList();
Random gen = new Random();
for (int i = 0; i < n; ++i) {
if (i != 0)
Console.Write(' ');
index = gen.Next(indice.Count);
Console.Write(data[indice[index]]);
// Index has been shown, let's remove it since we're not going to show it again
indice.RemoveAt(index);
}
...
答案 2 :(得分:0)
似乎陷入无限循环。尝试更改此位:
case 2:
for (int z = y; z > 0; z--)
{
if (newarray[y] == newarray[z-1])
goto case 1;
}
break;
答案 3 :(得分:0)
您没有看到任何输出的原因是因为代码没有运行完成 - 它最终在案例1和2之间反弹,因为
if (newarray[y] == newarray[z - 1])
总是如此。
我的建议是调试(即逐步执行)您的代码,这样您就可以真正理解为什么会这样,那么您将能够自己修复代码:)
答案 4 :(得分:0)
您要做的是生成随机排列。您可以尝试以下方法:
var rand = new Random();
var left = Enumerable.Range(1, n).ToList();
for(int i=0; i<n; ++i)
{
int j = rand.Next(n-i);
Console.Out.WriteLine(left[j]);
left[j].RemoveAt(j);
}
答案 5 :(得分:0)
使用随机比较这是最简单的方法。
class Program
{
static Random rnd=new Random();
static void Main(string[] args)
{
int[] array= { 1, 2, 3, 4, 5, 6 };
int[] newarray=new int[array.Length];
array.CopyTo(newarray, 0);
Array.Sort(newarray, (i, j) => rnd.NextDouble()<0.5?-1:1);
// newarray is now randomly ordered
}
}
答案 6 :(得分:-1)
您可以随意切换值:
int n;
Console.WriteLine("Please enter a positive integer for the array size"); // asking the user for the int n
n = Int32.Parse(Console.ReadLine());
int[] array = new int[n]; // declaring the array
int[] newarray = new int[n];
Random rand = new Random();
for (int i = 0; i < array.Length; i++)
{
array[i] = i + 1;
newarray[i] = i + 1;
}
for (int y = 0; y < newarray.Length; y++)
{
int r = rand.Next(n);
int tmp = newarray[y];
newarray[y] = newarray[r];
newarray[r] = tmp;
}
for (int x=0;x<newarray.Length;x++)
{
Console.Write(" {0}", newarray[x]);
}
Console.ReadLine();
答案 7 :(得分:-1)
使用以下代码
int[] array = new int[n];
int[] randomPosition = new int[n];
Enumerable.Range(0, n ).ToList().ForEach(o => array[o] = o+1);
Random r = new Random();
Enumerable.Range(0, n).ToList().ForEach(o => randomPosition[o] = r.Next(0, n - 1));
foreach (var m in randomPosition)
{
var randomNumber = array[m];
//write randomnumber
}