我怎样才能只调用方法中的return变量?

时间:2016-11-17 20:42:56

标签: c#

我是新手,并且在面向对象编程方面苦苦挣扎。我想在我的第三个方法'tableinfo'中只使用返回值但是我不知道如何只将这个值传递给其他方法,而不再运行前两个方法。我想要做的只是将用户输入的值转移到第三种方法而不必每次都输入两次值,这是我知道获得价值的唯一方法,我真的很感激,如果有人可以帮助我获得返回值。这段代码是我正在尝试做的一小部分,它的目的并不重要,我只是想创建一个例子来尝试让人们理解我的意思。 先感谢您!

class Program
{
    static void Main(string[] args)
    {
        TableOrder TO = new TableOrder();
        TO.TableNumber();
        TO.NumberOfPartons();
        TO.tableinfo();
    }
}

class TableOrder
{
    int tablenumber;
    string inputtablenumber;
    int numberAtTable;
    string inputNumberAtTable;

    public int TableNumber()
    {
        Console.Write("please enter the table number:");
        inputtablenumber = Console.ReadLine();
        tablenumber = int.Parse(inputtablenumber);
        return tablenumber;            
    }

    public int NumberOfPartons()
    {
        Console.Write("please enter how many people are seated: ");
        inputNumberAtTable = Console.ReadLine();
        numberAtTable = int.Parse(inputNumberAtTable);
        return numberAtTable;
    }               

    public void tableinfo()
    {
        int tablenum = TableNumber();
        Console.Write(tablenumber + 1);

        int patrons = NumberOfPartons();
        Console.WriteLine(numberAtTable + 1);
    }
}

2 个答案:

答案 0 :(得分:0)

看起来您可能会对方法,属性和字段之间的区别感到困惑。您的函数TableNumber()可能更准确地称为AskUserForTableNumber()或GetTableNumberFromInput()。这样的事情。您还要设置成员字段并返回值。因此,您可以通过多种方式存储和检索该值。如果成员字段表编号标记为公共,则可以访问它。或者在您的主​​要功能中,您可以这样做:

the_number = random.randint(1,3)
tries = 0
guesses = 5

#guessing loop
guess = None
while guess != the_number:
    guess = int(input("Take a guess: "))
    tries += 1
    guesses -= 1

    if guess > the_number:
        print("Lower...")
    elif guess < the_number:
        print("Higher...")

    if guess == the_number:
        print("You guessed it! The number was", the_number)
        print("And it only took you", tries, "tries!\n")

    if guesses <= 0:
        print("Sorry, you're out of guesses! Try again...")
        break

然后重用该值。

您正在做的另一件奇怪的事情是将输入字符串存储为成员字段。如果您不需要再次引用该字符串,那么它没有理由成为TableOrder对象的成员,它可能是正在进行输入的函数的局部变量。

但似乎您正在尝试使用TableOrder.TableNumber作为属性。这很可能是正确的做法,但不是你正在做的事情。这是一种(有点奇特的)做类似事情的方式,它也使用了懒惰加载的概念......

int tablenum=TO.TableNumber();

这样,当您第一次尝试访问表号时,它会询问用户该值。之后,您将拥有该值,因此不会再次询问。请注意,这种方法并不是必需的,并且在您需要使用该值之前等待加载值非常有用。相反,您可以执行以下操作:TableOrder.TableNumber = GetTableNumberFromInput();

答案 1 :(得分:0)

首先,您可以删除主要调用,因为方法tableinfo()会调用它们:

class Program
{
    static void Main(string[] args)
    {
        TableOrder TO = new TableOrder();
        TO.tableinfo();
    }
}

其次,您想要使用已经声明的类变量, 两个函数的返回值存储在这些函数中,您可以使用Write输出它们。

public void tableinfo()
{
    tablenumber = TableNumber();
    Console.Write(tablenumber + 1);

    numberAtTable = NumberOfPartons();
    Console.WriteLine(numberAtTable + 1);
}

在此函数的范围内,返回值(return numberAtTablereturn tablenumber)不再存在,它们存储在被调用函数的左侧。