C# 以随机顺序显示整数数组而不使用无序排列 intn; Console.WriteLine(“请为数组大小输入一个正整数”);//向用户询问int n n=Int32.Parse(Console.ReadLine()); int[]数组=新的int[n];//声明数组 int[]newarray=newint[n]; Random rand=新的Random(); for(int i=0;i
您可以这样做:C# 以随机顺序显示整数数组而不使用无序排列 intn; Console.WriteLine(“请为数组大小输入一个正整数”);//向用户询问int n n=Int32.Parse(Console.ReadLine()); int[]数组=新的int[n];//声明数组 int[]newarray=newint[n]; Random rand=新的Random(); for(int i=0;i,c#,C#,您可以这样做: 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 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();
。。。
n=Int32.Parse(Console.ReadLine());
//用1..n个值填充的初始数组
int[]data=Enumerable.Range(1,n).ToArray();
//要显示的数据数组标记,最初为0..n-1
List indice=Enumerable.Range(0,n-1).ToList();
Random gen=新的Random();
对于(int i=0;i
您可以随机切换值:
...
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);
}
...
intn;
Console.WriteLine(“请为数组大小输入一个正整数”);//要求用户输入int n
n=Int32.Parse(Console.ReadLine());
int[]数组=新的int[n];//声明数组
int[]newarray=newint[n];
Random rand=新的Random();
for(int i=0;i 对于(int x=0;x它似乎进入了一个无限循环。请尝试更改此位:
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();
您没有看到任何输出的原因是因为代码没有运行到完成-它最终在案例1和案例2之间反弹,因为
case 2:
for (int z = y; z > 0; z--)
{
if (newarray[y] == newarray[z-1])
goto case 1;
}
break;
这永远是真的
我的建议是调试(即逐步调试)您的代码,以便您真正了解为什么会出现这种情况,然后您可以自己修复代码:)使用以下代码
if (newarray[y] == newarray[z - 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
}
var rand=new Random();
var left=可枚举的.Range(1,n).ToList();
对于(inti=0;i我认为你的方法非常复杂。你应该后退一步,想想你希望完成什么,先计划好,然后开始编程
您要做的是使用随机排序顺序对数组进行排序
创建一个新的IComparer
,随机返回比较结果:
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);
}
公共类随机比较器:IComparer{
私有静态随机=新随机();
公共整数比较(TA,TB){
返回random.Next(2)==0?1:-1;
}
}
现在,对数组进行排序:
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[]数组={
1, 2, 3, 4, 5,
6, 7, 8, 9, 10
};
Sort(Array,new RandomComparer());
for(int i=0;i
这真的很简单。请看上的演示这是使用随机比较的最简单方法
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]);
类程序
{
静态随机rnd=新随机();
静态void Main(字符串[]参数)
{
int[]数组={1,2,3,4,5,6};
int[]newarray=newint[array.Length];
CopyTo(newarray,0);
Array.Sort(newarray,(i,j)=>rnd.NextDouble()噢,得了吧!为什么在C#中使用goto?:(这是goto
@JustinIurmanI为数不多的几个普遍接受的用法之一,我真的不明白这个问题。目的是什么?你想随机化数组中的重复项还是不重复项?我不知道什么是“不使用shuffle”意思是。你为什么不想使用洗牌?是(1)因为你不想更改原始数组,还是(2)因为这是一个家庭作业问题,还是(3)为了学习练习(参见(2))?这不会以随机顺序显示数组。它显示数组中的随机元素,很可能是重复的。此外,array
可以用一种更简单的方式初始化:array=Enumerable.Range(1,n).ToArray();
randomPosition
数组只填充了范围中的随机整数[0,n.Random.Next
不能确保这些调用会产生唯一的值,重复已经给定的值是非常好的。是的,我知道Random.Next
是如何工作的,连续调用n次不会产生整数[0,n]以随机顺序。该方法试图模拟一个均匀分布,其中每个调用独立于最后一个调用。两个连续调用random是完全可能和合理的。接下来将给出相同的结果。在这种情况下,调用甚至不需要连续,只需在序列。序列中至少两次获得一个数字的几率应该是1-n!/n^n,这是一个非常迅速接近1的值。例如,如果创建var rng=new Random(12345);
然后调用rng.Next(10)
5次,它返回0,0,7,5,7
,0和7都重复了两次!@slashshogdhe这没什么区别!它仍然可以产生重复!想一想。这就像掷骰子。如果你掷骰子4次,你能掷六次吗?是的!Random()的工作方式相同。这不是洗牌吗?是的=)我以为有一个现有的洗牌方法,就像在Ja中一样
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
}
}