无法在main方法中调用数组

时间:2017-01-10 11:23:04

标签: c# arrays sorting methods

我练习方法,但问题是我想分开输入和排序,显示方法将是主要的,我无法从其他类修复此调用。

这是我的剧本:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CaseProblem
{
    class Method
    {
        static void MethodInput()
        {
            int[] array = new int[5];
            int i;
            // loop for accepting values in array
            for (i = 0; i < 5; i++)
            {
                Console.Write("Enter number:\t");
                array[i] = int.Parse(Console.ReadLine());
            }
        }
        public static void MethodSort()
        {
            foreach (int i in array)
            {
                Console.Write(" {0}", i);
            }
        }
    }
    class Program
    {
        static void Main(int[]array)
        {
            //sorting array value;
            Array.Sort(array); //use array's sort function

            Method.MethodSort(array);
            Console.ReadLine();
        }
    }
}

感谢您的帮助

4 个答案:

答案 0 :(得分:0)

好吧,你缺少被调用函数的参数。

{{1}}

注意:未经测试

答案 1 :(得分:0)

首先Main()(或&#34; EntryPoint&#34;我们应该调用它)不能将int[]作为输入参数,而是string[]而应该学习基础知识在开始实际编码之前编程。

第二件事:

  

我想分开输入和排序

您可以创建名为Input

的对象
public class Input
{
    public static void Write(string message)
    {
        Console.WriteLine(message);
    }

    public static int? ReadInt(string reason)
    {
        Write(reason);
        string userInput = Console.ReadLine();
        int parsed = 0;
        if(int.TryParse(userInput, out parsed))
            return (int?)parsed;

        return null;
    }
}

这将是您的&#34; InputLogic&#34;您可以将其用作Input.ReadInt("Please specify your age: ");

接下来,您可以创建一个Operations对象:

public class Operations
{
    public void Display(int[] arr)
    {
        foreach(int i in arr)
        {
            // and since you have "Input" class that can display things
            Input.Write(i.ToString());
        }
    }

    public void Sort(ref int[] arr)
    {
        Array.Sort(arr);
    }
}

现在最后一件事是将其合并到Program

class Program
{
    static void Main(string[] args)
    {
        int[] arr = new int[5];
        for(int i = 0; i < arr.Length; i++)
        {
            int? input = null;
            while( !( input = Input.ReadInt("Give me number") ).HasValue ) { }
            arr[i] = input.Value;
        }

        Operations op = new Operations();
        op.Display(arr);
        op.Sort(ref arr);
        op.Display(arr);
    }
}

答案 2 :(得分:0)

好的,这个方法都有两个错误:

public static void MethodSort()
{
    foreach (int i in array)
    {
        Console.Write(" {0}", i);
    }
}

以及你如何称呼它:

Method.MethodSort(array);

第一个问题是该方法使用变量array,该变量在该方法的scope中不存在。

第二个问题是您将array传递给Method.MethodSort,但该方法未配置为参数。

有两种方法可以解决此问题:完全删除array,或更改方法以接受它。现在,你显然无法删除array,因为重点是用它来做事。因此,逻辑解决方案是将array作为参数添加到您的方法中:

public static void MethodSort(int[] array)
{
    foreach (int i in array)
    {
        Console.Write(" {0}", i);
    }
}

答案 3 :(得分:-1)

由于我们中的一些人无法读取代码,我将解释我在这里所做的事情。我已将您的静态方法标记为公开,因此您可以访问它们。我给了类一个Helper postfix,因为它包含静态方法,消费者应该知道这不是一个简单的类,它存储了它的内部状态。由于我们使用静态方法,因此将它们视为传统的C函数。它们实际上没有状态(除了静态声明的字段和属性,但我们没有这些)。因此,您需要传递您将在其中使用的每个参数或在本地计算它们。由于您在数组上操作,我们将它们作为参考传递。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace CaseProblem
{
    class CaseHelper
    {
        public static void ReadFiveNumbersToAnArray(ref int[] array)
        {
            int i;
            // loop for accepting values in array
            for (i = 0; i < 5; i++)
            {
                Console.Write("Enter number:\t");
                array[i] = int.Parse(Console.ReadLine());
            }
        }

        public static void WriteOutAnArrayPlease(ref int[] array)
        {
            foreach (int i in array)
            {
                Console.Write(" {0}", i);
            }
        }
    }

    class Program
    {
        static void Main(int[] parameters)
        {
            int[] array = new int[5];

            CaseHelper.ReadFiveNumbersToAnArray(ref array);

            //sorting array value; <-- It's obvious from the method named Sort.
            Array.Sort(array); //use array's sort function <-- Again, we know this.

            CaseHelper.WriteOutAnArrayPlease(ref array);

            Console.ReadLine();
        }
    }
}