Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.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#如何制作pin码,只有按正确的顺序键入时才能解锁_C# - Fatal编程技术网

C#如何制作pin码,只有按正确的顺序键入时才能解锁

C#如何制作pin码,只有按正确的顺序键入时才能解锁,c#,C#,我正在制作一个vault应用程序,要求按特定顺序输入代码(1 2 3) 现在我已经确定,按下12和3时保险库将解锁,但顺序一点也不重要。 我想让保险库仅在第一次、第二次和第三次按下按钮1时解锁 谢谢 将数字附加到字符串,然后将字符串与正确的PIN匹配 private static string THECORRECTPIN = "1234"; private string _PinEntered{get;set;} public void KeyPressed(string number) {

我正在制作一个vault应用程序,要求按特定顺序输入代码(1 2 3) 现在我已经确定,按下12和3时保险库将解锁,但顺序一点也不重要。 我想让保险库仅在第一次、第二次和第三次按下按钮1时解锁


谢谢

将数字附加到字符串,然后将字符串与正确的PIN匹配

private static string THECORRECTPIN = "1234";
private string _PinEntered{get;set;}
public void KeyPressed(string number)
{
    _PinEntered += number;//here's the important bit
    if(_PinEntered == THECORRECTPIN)
    {
        Unlock();
    }

}

你可能想得太多了

public bool VaultLock(string key)
{
    if(key == "1234")
        return true;
    return false;
}

创建一个接受输入(一个字母)并使其移动到另一个状态的状态机。2.

状态可以是有效(所有输入都有效)、无效(需要更多输入)或错误(无法再次达到有效状态)

给它五个州: 1.开始,没有输入,输入1转换为状态2。 2.在输入2上转换为状态3。 3.在输入3上转换为状态4。 4.是有效状态,没有转换 5.错误状态,无转换

如果给定的输入表明当前状态没有可供转换的字符串,则转到错误状态

更新,这个概念可能会变得非常复杂,它形成了搜索引擎的基础。这一实施非常基本:

namespace Algorithms
{
    public class Automaat
    {
        public const char Epsilon = default(char);
        private Graph current, valid;

        public Automaat(string text)
        {
            Graph start = new Graph();
            valid = new Graph();

            current = start;

            foreach (var letter in text)
            {
                var next = new Graph();
                current.SetTransition(next, letter);
                current = next;
            }

            valid = current;
            current = start;
        }

        public void Input(char symbol)
        {
            if (current != null)
                current = current.Next(symbol);
        }

        public bool IsValid()
        {
            return current == valid;
        }


        /// <summary>
        /// Holds connections to other graphs, the position of that graph in the array relative to the alphabet determines what symbol that link uses.
        /// </summary>
        private class Graph
        {
            private static char[] alphabet;
            Graph[] nodes;

            public Graph()
            {
                nodes = new Graph[26];
            }

            public void SetTransition(Graph graph, char symbol)
            {
                nodes[ConvertToIndex(symbol)] = graph;
            }

            public Graph Next(char symbol)
            {
                return nodes[ConvertToIndex(symbol)];
            }

            private int ConvertToIndex(char symbol)
            {
                return symbol - 'a';
            }
        }
    }
}
命名空间算法
{
公共级自动驾驶仪
{
public const char Epsilon=默认值(char);
私有图形当前,有效;
公共自动编码(字符串文本)
{
图形开始=新图形();
valid=新图形();
电流=启动;
foreach(文本中的var字母)
{
var next=new Graph();
当前.SetTransition(下一个,字母);
当前=下一个;
}
有效=当前;
电流=启动;
}
公共无效输入(字符符号)
{
如果(当前!=null)
当前=当前。下一个(符号);
}
公共bool是有效的()
{
返回电流==有效;
}
/// 
///保持与其他图形的连接,该图形在数组中相对于字母表的位置决定链接使用的符号。
/// 
私有类图
{
私有静态字符[]字母表;
图[]节点;
公共图()
{
节点=新图形[26];
}
公共void SetTransition(图形、字符符号)
{
节点[转换索引(符号)]=图形;
}
公共图形下一步(字符符号)
{
返回节点[转换索引(符号)];
}
专用整数转换索引(字符符号)
{
返回符号-‘a’;
}
}
}
}

您如何接受/读取输入?你有什么代码可以分享吗?如果您将输入作为单个字符串构建,一个简单的解决方案是
input==answer
,因为它必须精确匹配。将正确的组合(正确的PIN)和输入组合放入
IEnumerable
(例如
列表
列表
)我希望这是一个游戏或者其他不需要安全的东西。否则,我建议你选修一门密码学课程,或者让懂密码学的人来修。谢谢你的回答,你能给我一个小的演示一下你的想法吗?我算是个新手。谢谢你的回复,你能不能给我一个你的想法的小例子?我是个新手。。