【问题标题】:C# Having a dumb Moment when calling method with arrayC#使用数组调用方法时有一个愚蠢的时刻
【发布时间】:2012-07-04 04:25:22
【问题描述】:

我的工作几乎按预期进行。它本身的程序可以运行,但输出有点古怪。它需要多次点击返回键才能显示在 for 循环中并由 output() 方法调用的数组的内容。

=( 看起来很简单,但我没有看到我的问题。

我的第二个问题是我调用 output(arr) ONCE 但输出根据数组的大小打印了数组的多个实例......

class Program
{
    static void Main(string[] args)
    {
        int value;

        Console.Write("How big of an Array? ");
        int arraySize = int.Parse(Console.ReadLine());
        int[] arr = new int[arraySize];


        for (int i = 0; i <= arraySize - 1; i++)
        {
            Console.Write("First Value: ");
            value = int.Parse(Console.ReadLine());
            arr[i] = Convert.ToInt32(value);
        }

        output(arr);
        Console.ReadLine();
    }

    static void output(Array arr)
    {

        foreach (int i in arr)
        {
            for (int v = 0; v < arr.Length; v++)
            {
                string number = "Value: ";
                string arrayPoint = "Array Section: ";

                Console.WriteLine("{0}{1}\t{2}{3}", arrayPoint, v, number, i);

            }
        }
    }
}

【问题讨论】:

  • 当value 已经是int 时,为什么还需要这个Convert.ToInt32(value)?

标签: c# arrays loops for-loop


【解决方案1】:

你的代码中有几件事,

您的输出方法正在接收Array 类型的参数,而不是应该接收int[],并且您应该循环一次,而不是两次。

static void output(int[] arr)
        {
                for (int v = 0; v < arr.Length; v++)
                {
                    string number = "Value: ";
                    string arrayPoint = "Array Section: ";

                    Console.WriteLine("{0}{1}\t{2}{3}", arrayPoint, v, number, arr[v]);
                }
        }

第二,在您的 Main 方法中,您使用提示输入第一个值,当假设用户输入第二个或更高元素的值时,这有点令人困惑,您可以将其更改为:

    for (int i = 0; i <= arraySize - 1; i++)
    {
        Console.Write(string.Format("Value for Element {0}: ",i));
        value = int.Parse(Console.ReadLine());
        //arr[i] = int.Parse(Console.ReadLine()); // or you can do
        arr[i] = value;
    }

【讨论】:

    【解决方案2】:

    output 方法中只需要一个循环。试试这样...

    static void output(Array arr)
    {
        for (int v = 0; v < arr.Length; v++)
        {
            string number = "Value: ";
            string arrayPoint = "Array Section: ";
    
            Console.WriteLine("{0}{1}\t{2}{3}", arrayPoint, v, number, arr.GetValue(v));
        }
    }
    

    【讨论】:

    • 此解决方案仍会根据数组大小为我提供相同信息的多个输出,并且不会通过单击返回键来显示整个数组。
    • arr[v] 将导致错误,无法使用数组类型的表达式应用索引
    • @Habib.OSU 谢谢,我没有意识到。将其更改为 arr.GetValue
    猜你喜欢
    • 2017-02-25
    • 2020-05-13
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2010-09-18
    • 2012-07-26
    相关资源
    最近更新 更多