小编Cas*_*erT的帖子

在C#中验证readline输入的最佳方法是什么?

哦,2件事:1)这是一个控制台应用程序.2)我知道它是丹麦语,但它并不重要,它只是一个要求输入的例子.文本和变量无关紧要.

好吧,考虑一下这个简单的输入:它可能是任何类型的输入问题.

Console.WriteLine("Hvad er dit kundenummer: (Kun hele tal tilladt)");
string inputKnr = Console.ReadLine();
kundenummer = Convert.ToInt16(inputKnr);
Run Code Online (Sandbox Code Playgroud)

现在,如果客户输错了怎么办?比如一封信.try&catch会确保应用程序不会中断,但这不是我想要的解决方案.我希望它说你做错了,再试一次.很经典吧?

但是解决这个解决方案的最佳方法是什么?我想到了这个:

bool fangetKundenummer = true;
while (fangetKundenummer)
{
Console.WriteLine("Hvad er dit kundenummer: (Kun hele tal tilladt)");
string inputKnr = Console.ReadLine();
try
{
    kundenummer = Convert.ToInt16(inputKnr);
    fangetKundenummer = false;
}
catch
{
    Console.WriteLine("Fejl. Prøv igen");
}
}
Run Code Online (Sandbox Code Playgroud)

但它似乎不是正确的方法.

另外,仅举几例,我正在玩的这个小应用程序连续4个输入问题.这意味着这个令人讨厌的while()循环的4倍.

你也可以写一个函数.像这样的东西(没有理由以正确的方式去做,它只是为了说明一个概念):

static void verifyInput()
{
    try
    {
        Console.WriteLine("question");
        input = Console.ReadLine();
        kundenummer = Convert.ToInt16(input)
    }
    catch
    {
        Console.WriteLine("Wrong. Do it …
Run Code Online (Sandbox Code Playgroud)

c# verify readline

1
推荐指数
1
解决办法
5290
查看次数

反转单个链表

我希望我使用正确的术语.我制作了一个单链表.

class MyStack
{
    public Node Initial { get; set; }

    public MyStack()
    {
        Initial = null;
    }

    public void Push(int data)
    {
        var node = new Node { Data = data, Next = Initial };
        Initial = node;
    }

    public int Pop()
    {
        int res = Initial.Data;
        Initial = Initial.Next;
        return res;
    }

    public int Sum()
    {
        int sum = 0;
        Node currentNode = Initial;
        while (currentNode != null)
        {
            sum += currentNode.Data;
            currentNode = currentNode.Next;
        }
        return sum; …
Run Code Online (Sandbox Code Playgroud)

c# linked-list

0
推荐指数
1
解决办法
921
查看次数

为什么我不能做currentNode = currentNode.Next.Next?

我制作了自己的单链/链表.现在,如果我想从列表中删除/删除节点/项目,我必须做这样的事情:

public void Delete(PARAMETERS)
{
    Node previousNode = null, 
        currentNode = f;
    while (currentNode != null)
    {
        if (SOMECONDITION)
        {
            if (previousNode == null)
            {
                f = currentNode.Next;
            }
            else
            {
                previousNode.Next = currentNode.Next;
            }
        }
        else
        {
            previousNode = currentNode;
        }
        currentNode = currentNode.Next;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果SOMECONDITION为真,你只需跳过currentNode就可以有效地"删除"节点,因为没有任何东西指向它.

但是,我真的很想知道,为什么我不能这样做:

(...)
        while ()
        {
            if (SOMECONDITION)
            {
                currentNode = currentNode.Next;
            }
            currentNode = currentNode.Next;
        }
(...)
Run Code Online (Sandbox Code Playgroud)

也许:

(...)
        while ()
        {
            if (SOMECONDITION)
            {
                currentNode = currentNode.Next.Next;
            }
            else
            {
                currentNode …
Run Code Online (Sandbox Code Playgroud)

c#

0
推荐指数
1
解决办法
652
查看次数

将索引添加到自定义列表

我有以下列表:

public class MyQueue : IEnumerable<int>
{
    private Node Head { get; set; }
    private Node Tail { get; set; }

    public MyQueue()
    {
        Head = null;
    }

    public void Add(int item)
    {
        Enqueue(item);
    }

    public void Enqueue(int item)
    {
        var newItem = new Node { Data = item };

        if (Head == null)
        {
            Head = newItem;
            Tail = newItem;
            return;
        }

        Node last = Tail;
        last.Next = newItem;
        Tail = newItem;
    }
    public IEnumerator<int> GetEnumerator()
    {
        Node current …
Run Code Online (Sandbox Code Playgroud)

c#

0
推荐指数
2
解决办法
3111
查看次数

标签 统计

c# ×4

linked-list ×1

readline ×1

verify ×1