回答 为什么我的领域不起作用?

WB1975

众所周知的成员
加入
4月3日,2020年
消息
87
编程经验
Beginner
大家好,

不能记住如果真正的新手问题在这里。

无论如何,我正在编写一个基本时代表程序

向用户询问1到12之间的数字,然后吐出该数字时间表,但是我有问题,为什么不能通过循环携带的号码携带号码?
我想认为公共互际号码在整个方案中都可以读取吗?
我的最后一行控制台.Writeline(数字); ,数字只是不可匹配。

C#:
using System;

namespace MuliplicationTable
{

    class Program
    {
        public int number;

        static void Main(string[] args)
        {
            Console.WriteLine("Multiplication Tables");
            Console.WriteLine("*********************");

            bool hasValidNumber = false;

            do
            {
                Console.WriteLine("Enter number between 1 and 12:");
                int number = Console.Read();
                if (number > 1 && number < 12)
                {
                    hasValidNumber = true;
                } else
                {
                    hasValidNumber = false;
                }
            } while (!hasValidNumber);

            console.writeline(数字);
        }
    }
}
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,160
地点
挪威
编程经验
10+
You have two variables named number in that code, one declared in class (a field) and one declared inside the do loop (a local variable). Outside the do block you are using the field.
 

WB1975

众所周知的成员
加入
4月3日,2020年
消息
87
编程经验
Beginner
You have two variables named number in that code, one declared in class (a field) and one declared inside the do loop (a local variable). Outside the do block you are using the field.

但为什么我不能打印出号码?它刚刚在这一行中强调了:
console.writeline(数字);
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,160
地点
挪威
编程经验
10+
Visual Studio是否有任何机会给您此错误消息?
非静态字段,方法或属性'program.number需要一个对象引用
在论坛发布时,这是您必须解释的。您无法期望任何人复制代码或猜测它。

Hint: Main method is static, while the class variable is an instance field of the Program class.
 

WB1975

众所周知的成员
加入
4月3日,2020年
消息
87
编程经验
Beginner
好的,将在未来的约翰做

好的,所以我做了变量

公共静态int解除arariable;

因此,为了在没有静态关键字的情况下使用要使用的变量,您需要从该类别中的类中创建一个对象,这是该小程序不需要的类。

但是如何将本地值分配给全局价值?不知道这个关键字是什么?但它并不起。

谢谢
 
Last edited:

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,731
地点
悉尼,澳大利亚
编程经验
10+
如何将本地值分配给全局价值?
不要首先声明局部变量。这样,要考虑的唯一变量是成员。你显然知道如何为变量分配一个值,因为您正在在代码中执行它,例如,
C#:
hasValidNumber = true;
你为什么坚持在这里有所不同:
C#:
int number = Console.Read();
不知道这个关键字是什么?但它并不起。
this is to specify a member of the current object but your code is in a static method so there is no current object. That's why you needed to declare the field static too. The Main method is always static so you cannot access instance members from within it. If you create an object of any type then that is an instance, so you can access instance members of that object.
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,160
地点
挪威
编程经验
10+
该字段不在方法之外使用,因此只需在方法内声明并使用局部变量。
 

WB1975

众所周知的成员
加入
4月3日,2020年
消息
87
编程经验
Beginner
谢谢家伙完美地工作。

有什么应该改变的吗?

C#:
using System;


namespace MuliplicationTable
{

    class Program
    {
        public static int userNumber;

        static void Main(string[] args)
        {
            bool hasValidNumber = false;
            while (!hasValidNumber)
            {
                Console.WriteLine("Enter number between 1 and 12:");

                userNumber = Convert.ToInt32(Console.ReadLine());

                if (userNumber >= 1 && userNumber <= 12)
                {
                    hasValidNumber = true;
                }
                else
                {
                    Console.WriteLine("That is not a valid number between 1 and 12:");
                }
            }
            
            for (int i=1;i <= 12;i++)
            {
                Console.WriteLine(i + " X " + userNumber + " = " + (i * userNumber));
            }
        }
    }
}
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,731
地点
悉尼,澳大利亚
编程经验
10+
当他们回来时,有人会变得强大。 :哈哈::哈哈:
有道理。为了澄清,问题是您在不同的范围内使用两个具有相同名称的两个变量。您应该使用其中一个变量。如果您需要的是,它最好使用局部变量。如果您需要一个可变的变量,则当本地将脱离范围时保留其值,请使用成员。
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,903
地点
切萨皮克,va.
编程经验
10+
有什么应该改变的吗?
只是风格的东西......
C#:
using System;

namespace MuliplicationTable
{
    class Program
    {
        const int InputMin = 1;
        const int InputMax = 12;
        const int MultiplierMin = 1;
        const int MultiplierMax = 12;

        static void Main(string[] args)
        {
            int userNumber;
            bool hasValidNumber = false;

            do
            {
                Console.Write($"Enter number between {InputMin} and {InputMax}: ");
                
                string input = Console.ReadLine();
                hasValidNumber = int.TryParse(input, out userNumber);
                hasValidNumber = hasValidNumber && InputMin <= userNumber && userNumber <= InputMax;
                if (!hasValidNumber)
                {
                    Console.WriteLine("That is not a valid number between {InputMin} and {InputMax}.");
                }
            } while (!hasValidNumber);

            for (int i = MultiplierMin; i <= MultiplierMax; i++)
            {
                Console.WriteLine($"{i} X {userNumber} = {i * userNumber}"");
                // or
                // Console.WriteLine("{0} X {1} = {2}", i, userNumber, i * userNumber)
            }
        }
    }
}

或者

C#:
using System;

namespace MuliplicationTable
{
    class Program
    {
        static int GetInteger(int min, int max)
        {
            while (true)
            {
                Console.Write($"Enter number between {min} and {max}: ");

                string input = Console.ReadLine();
                if (int.TryParse(input, out int value) &&
                    min <= value && value <= max)
                {
                    return value;
                }
                
                Console.WriteLine($"That is not a valid number between {min} and {max}.");
            }
        }
        
        static void ShowMultiplicationValues(int multiplicand, int multiplierMin, int multiplierMax)
        {
            for (int i = multiplierMin; i <= multiplierMax; i++)
            {
                Console.WriteLine($"{i} X {multiplicand} = {i * multiplicand}"");
            }
        }
                                  
        const int InputMin = 1;
        const int InputMax = 12;
        const int MultiplierMin = 1;
        const int MultiplierMax = 12;

        static void Main(string[] args)
        {
            int multiplicand = GetInteger(InputMin, InputMax);
            ShowMultiplicationValues(multiplicand, MultiplierMin, MultiplierMax);
        }
    }
}
 
最佳 底部