【问题标题】:Can't Call arrays in main method无法在 main 方法中调用数组
【发布时间】:2017-01-10 11:23:04
【问题描述】:

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

这是我的脚本:

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();
        }
    }
}

感谢您的帮助

【问题讨论】:

  • 您的问题究竟是什么?请更具体地说明您尝试过的内容以及遇到的问题。
  • public 放在static void MethodInput() 之前可能会有所帮助。
  • 在方法中添加参数(例如数组)也可能会有所帮助
  • Visual Studio 似乎完全有能力告诉您自己出了什么问题。我们在这里没什么可做的。

标签: c# arrays sorting methods


【解决方案1】:

首先Main()(或我们应该称之为“EntryPoint”)不能将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;
    }
}

这将是您的“InputLogic”,您可以将其用作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);
    }
}

【讨论】:

  • 哇哦我明白了!非常感谢hhh。 . .
【解决方案2】:

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

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

注意:未测试

【讨论】:

    【解决方案3】:

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

    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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-28
      • 1970-01-01
      • 2019-03-24
      • 2014-03-26
      • 2020-06-15
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多