众所周知,从字面上看我才刚刚开始编写C#,这是实践。

我在互联网上找到了GuessTheNumberGame代码,并一直在尝试改进基本游戏,以便提供反馈,并且用户可以更改数字。 我的程序可以运行,但想将“ NumberChange”模块与“ Code”方法分开。

我已经在我的'GuessTheNumberGame'内部制作了Main()方法,并执行了'Code'方法。 问题是,当我要更改数字范围时,“ NumberChange”模块不会将“ Public Static int从”或“ Public static int”的值更改; 因此,数字范围保持不变。

代码如下:

using System;

namespace GuessThatNumber
{
    class GuessTheNumberGame
    {
        static void Main()
        {
            Code(from, to, new_range);
        }

        public static int new_range = 0;
        public static int from = 1;
        public static int to = 10;

         static void Code(int from, int to, int new_range)
        {
            //int from = 1;   // The range the user will guess from.
            //int to = 10;    //The range the user will guess to.


            int guessedNumber;  //This will hold the value that the user guessed.
            int Counter = 0;    //Counter is used to count the number of guesses the user makes.
            int selection = 0;  //This value is for the selection at the start of the program
           //int new_range = 0;
            bool exit = false;

            while (exit == false)
            {
                Console.WriteLine("What would you like to do?");
                Console.WriteLine("1: Alter the range of guessed numbers? The range is currently from {0} to {1}.", from, to);
                Console.WriteLine("2: Try to guess the number?");
                Console.WriteLine("3: Exit the program?");
                Console.WriteLine("Please enter a number:");
                if (int.TryParse(Console.ReadLine(), out selection))
                {
                    if (selection == 2)
                    {
                        int randomNumber = new Random().Next(from, to);   //Generates a random number between the (from, to) variables.
                        Console.Write("The number is between {0} and {1}. ", from, to);
                        while (true)
                        {
                            Console.Write("Make a guess: ");
                            if (int.TryParse(Console.ReadLine(), out guessedNumber))
                            {
                                if (guessedNumber == randomNumber)
                                {
                                    Console.WriteLine("You guessed the right number!");
                                    if (Counter < 2)
                                    {
                                        Console.WriteLine("You guessed the number in only 1 turn! Amazing!");
                                        Console.WriteLine(" ");
                                    }
                                    else
                                    {
                                        Console.WriteLine("You guessed " + Counter + " times.");
                                        Console.WriteLine(" ");
                                    }
                                    break;
                                }
                                else
                                {
                                    Console.WriteLine("Your guess was too {0}.", (guessedNumber > randomNumber) ? "high" : "low");
                                    Counter = Counter + 1;
                                }
                            }
                            else
                            {
                                Console.WriteLine("Input was not an integer.");
                            }
                        }
                        //Console.WriteLine();
                        //Console.WriteLine("Press any key to exit.");
                        //Console.ReadKey();
                    }
                    else if (selection == 1)
                    {
                        NumberChange(from, to, new_range);
                    }

                    else
                    {
                        exit = true;
                    }
                }
            }
        }

        static int NumberChange(int from, int to, int new_range)
        {
            Console.WriteLine("Please enter the number that the guess will start from.");
            int.TryParse(Console.ReadLine(), out new_range);
            from = new_range;
            Console.WriteLine("Now enter the number that the guess will go to.");
            int.TryParse(Console.ReadLine(), out new_range);
            to = new_range;
            return new_range;
        }
    }
}

#1楼 票数:0

请阅读有关在C#中通过引用传递参数的信息

到目前为止,您的参数已按值传递。 这意味着在程序开始时调用Code()时, public static int frompublic static int to的当前值被复制fromto的参数to

调用NumberChange()时会发生相同的情况: fromto的参数值(局部变量) to相同的名称复制NumberChange()方法的参数中,但是如果在NumberChange中修改了这些值,则新值永远不要从那里回来; 你刚才修改的局部变量fromto了各自的方法中唯一存在。

相反,您可以使用ref关键字声明参数:

static int NumberChange(ref int from, ref int to, int new_range)

这意味着您也必须使用ref关键字为相应的参数调用方法:

NumberChange(ref from, ref to, new_range);

另外,请注意有关NumberChange()方法的两个问题:

  • 您传入一个new_range参数,但是您不使用它。 实际上,它在对TryParse()调用中被覆盖。 因此,您可以简单地将int new_range声明为局部变量,而不是将其作为参数传递。
  • 您从该方法返回一个值,但是您不使用该值。 因此,您可以将您的方法声明为void并删除return语句。

最后,如果要通过Code()更改变量的public static int frompublic static int to ,请将ref关键字类似地添加到NumberChange() 但是,这对于您当前的代码并没有真正的用处,因为该程序在离开Code()之后立即结束,并且根本不会使用新值。

#2楼 票数:0

您正在使用静态变量,然后将它们传递到已经可以访问它们的方法中。 基本上将它们传递给本地版本将覆盖静态版本。

将您的方法更改为此:

    private static void NumberChange() 
    { 
        int new_range;

        Console.WriteLine("Please enter the number that the guess will start from."); 
        int.TryParse(Console.ReadLine(), out new_range); 
        from = new_range; 
        Console.WriteLine("Now enter the number that the guess will go to."); 
        int.TryParse(Console.ReadLine(), out new_range); 
        to = new_range; 
    } 


    static void Code()
    {


    }

并删除此行:

public static int new_range = 0; 

#3楼 票数:-1

如果通过引用传递变量。 然后,您传递给他们的函数可以更改它们。

像这样的东西

static int NumberChange(ref int from, ref int to, ref int new_range)
{
    //Your code here
}

Adn与您的Code方法相同

  ask by fishycrakers translate from so

未解决问题?本站智能推荐:

5回复

使用方法在C#中返回int值

我正在用C#上编程课,这是我们的第一周,我正在努力一点。 为此,我正在尝试对我们的班级实验室之一进行修改,并坚持使用我的“ GetInt”方法。 理想情况下,GetInt方法(第50行)接受一个字符串(输入数字)并以int形式返回该数字,这样我便可以使用它进行一些数学运算。 当前,第2
3回复

如何在C#控制台应用程序中返回简单的int值

好的,所以我在此网站上找不到任何补救措施,大约三天前开始编程,而我正在研究本书。 我自己在练习方法,而我的int方法无法在Main方法中返回简单表达式的乘积。 这是我的代码: 任何有关此主题的额外信息将不胜感激。 谢谢。 我确定这是最终用户逻辑错误。
2回复

(Hackerrank - Fair Rations) 当返回字符串出现以下错误时 (C#)。 错误 CS0029:无法将类型 string' 隐式转换为 int

错误 CS0029:无法将类型 string' 隐式转换为 int 我正在尝试解决 HackerRank 的Fair Rations 问题。 我应该返回一个整数或字符串“NO”。 当我尝试返回字符串“NO”时,出现以下错误消息 以下是我的代码。 我如何返回“NO”?。 当我使用 `Cons
3回复

试图缩短一些代码,获得-1返回值

所以现在我有了这段代码- 看起来一切正常,它只是返回0-9的值,具体取决于单击哪个组件。 我一直试图缩短它,我想到了这个。 这将返回-1个值,或者返回错误的值。 有任何想法吗? 谢谢。
1回复

如何从静态void方法返回变量

我是C#和强类型语言的新手。 我正在为大学做作业,我的程序现在按预期工作。 但是,我将2个静态void方法标题更改为具有未意识到的返回类型,这将导致扣除标记。 我更改了它们,因为我不知道如何从中返回可变金额 静态void WithdrawAmount(int whichAccou
2回复

我如何将变量传递给类,然后返回给它使用不同值定义的类?

我正在为我的一个课程编写一个“ Nim”程序,该程序会生成随机数的岩石,然后播放器和计算机轮流从堆中移除1-3块岩石。 玩家将最后一块岩石移走。 但是,无论方法中为计算机生成的代码是什么,它总是返回0,因此计算机从堆中清除了0块岩石。 (这也可能有助于了解这是两个单独的文件。 )
1回复

java使用方法返回的值

我的学生成绩分类器需要使用返回的值,我已经尝试过,但是输入被提示了三遍。 我确定这是因为我正在调用方法getStudentMark()以使用从该方法中检索到的值。 码: 然后在main方法中调用它们(我无法更改): 分配int时,我哪里出错了? 它不断要求输入3次。
1回复

从android jni返回的int是错误的值

我在android java中有一个int值约为100,我将其打印到日志中以确保。 当我从静态方法将其返回到C ++时,其值为1585156834 这是C ++代码 和java方法: 和java字段:public static int BonesCollected;