Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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# - Fatal编程技术网

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
    }
}