如何调用将char数组作为参数的方法

时间:2017-07-13 17:50:38

标签: c# arrays methods

我有一个字符串类型的重新洗牌方法,它需要一个char数组作为参数,每次使用Encrypt方法时它必须随机化数组内的字符..当我试图用另一种方法调用它时我的语法错误“方法有一些无效的参数”这是代码

char[] p = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
string reshuffle(char[] alpas)
        {
            Random random=new Random();
            for (int t = 0; t < alpas.Length; t++)
            {
                char tmp = alpas[t];
                int r = random.Next(t, alpas.Length);
                alpas[t] = alpas[r];
                alpas[r] = tmp;
            }
            return new string (alpas);
        }
public string Encrypt(string pt)
        {
            reshuffledChars=reshuffle(p[25]);
            char[] ch = reshuffledChars.ToCharArray();
            char[] buffer = new char[(pt.Length)];
            for(int i=0;i<pt.Length;i++)
            {
                for(int j=0;j<26;j++)
                {
                    if (char.ToUpper(p[j]) == pt[i])
                    {
                        buffer[i] = char.ToUpper(ch[j]);
                        break;
                    }
                    else if(char.ToLower(p[j])==pt[i])
                    {
                        buffer[i] = char.ToLower(ch[j]);
                        break;
                    }
                    else if(pt[i]==' ')
                    {
                        buffer[i] = ' ';
                    }
                }
            }
            return new string(buffer);
        }

4 个答案:

答案 0 :(得分:1)

您应该传递整个数组,而不是传递reshuffle(p[25]),这是一个charreshuffle(p)

答案 1 :(得分:0)

在这一行: “reshuffledChars =洗牌(对[25]);” p [25]返回一个char

答案 2 :(得分:0)

Encrypt()中的这一行:

reshuffle(p[25]);

应该(我假设)是:

reshuffle(p);

您将char而不是char[]传递给reshuffle() - p[25]是数组char中的最后一个p

顺便说一句,如果p保持不变,则需要在传递给reshuffle之前将其复制。

答案 3 :(得分:0)

您传递了错误的参数而不是reshuffle(p[25])使用reshuffle(p)来发送整个数组。

如果您正在寻找随机字符串生成器,this link将有所帮助。我在dotnet小提琴中提供了一个工作示例。

using System;
using System.Linq;

namespace Rextester
{
   public class Program
   {
    private static Random random = new Random();

    public static string RandomString(int length)
    {
        const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%&";
        return new string(Enumerable.Repeat(chars, length)
          .Select(s => s[random.Next(s.Length)]).ToArray());
    }

    public static void Main(string[] args)
    {
        //Your code goes here
        Console.WriteLine(RandomString(8));
    }
  }
}